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();
%>

(同样的问题存在于 TreeView 而不是 PanelBar)

Action 方法本身执行速度很快

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 回答