2

私はtelerikのMVC拡張機能を使用して、デモページに示されているようにサイトマップをバインドしています:http://demos.telerik.com/aspnet-mvc/panelbar/sitemapbinding

ただし、次のコードでサイトマップをレンダリングする場合、約6秒かかります

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
    Html.Telerik().PanelBar()
       .Name("SiteMapPanelBar")
       .BindTo("sitemap")
       .Render();
%>

(PanelBarの代わりにTreeViewでも同じ問題が発生します)

アクションメソッド自体は高速に実行されます

public partial class NavigationController : Controller
{
    public const string SiteMapFile = "~/Web.sitemap";
    public const string SiteMapName = "siteMap";
    public const string SiteMapKey = "siteMap";

    [PopulateSiteMap(SiteMapName = SiteMapName, ViewDataKey = SiteMapKey)]
    public virtual ActionResult SiteMap()
    {
        if (!SiteMapManager.SiteMaps.ContainsKey(SiteMapKey))
        {
            SiteMapManager.SiteMaps.Register<XmlSiteMap>(SiteMapKey, sitmap => sitmap.LoadFrom(SiteMapFile));
        }

        return View();
    }
}

誰かが同じ問題に遭遇したか、および/または問題が何である可能性があり、それを解決する方法を知っていますか?

ありがとう

4

1 に答える 1

1

投稿されたフォーラムスレッドの回答の引用は次のとおりです。

さらに調査した結果、Spring.Web.Mvc.dllが問題であることが判明しました。この場合、PanelBar UIコンポーネントは、各ノードとその子がアクセス可能かどうかをチェックします。したがって、この場合、「セキュリティトリミング」機能が機能します。IsAccessible()メソッドは、アイテムのアクセシビリティをチェックするために、すべてのコントローラーとアクション属性を取得します。デバッグモードのアプリケーションとSpring.Web.Mvc.dllへの参照の組み合わせは、取得された属性がキャッシュされないため、このパフォーマンスの問題を引き起こすことをすでに推測しているでしょう。パフォーマンスを向上させる必要がある場合は、リリースモードでテストすることをお勧めします。それでも、この問題をさらに調査し、この問題のより良い解決策を見つけようとします。おそらく常にコントローラーの属性をキャッシュします。

于 2011-02-22T10:52:22.217 に答える