【问题标题】:How can I place an ASP.NET menu control into cache?如何将 ASP.NET 菜单控件放入缓存中?
【发布时间】:2011-10-04 20:02:29
【问题描述】:

我有一个 SharePoint2010 网站,我为其创建了一个 ASP.NET 菜单控件。 ASP.NET 菜单的内容最初是空的,在 Page_Load 我从服务器上的标准 HTML 文件加载它的内容:

           protected void Page_Init(object sender, EventArgs e)
        {
            string MenuPath = (string)ConfigurationSettings.AppSettings["RootMenuPath"].ToString();

            Menu1.Items[0].ChildItems[0].Text = File.ReadAllText(MenuPath + "\\About.htm");
//etc...
}

我注意到这是一种可怕的做事方式。每次用户加载页面时,它都会访问磁盘。

我该怎么做:

a) 缓存代码和 asp.net 菜单项,使其保留在内存中?

b) 使用其他方法确保它不是从磁盘加载的?

谢谢

【问题讨论】:

    标签: asp.net sharepoint-2010 menu


    【解决方案1】:

    您可以将数据加载包装到属性中并在那里至少使用页面缓存:

     readonly object cacheLock = new object();
    string AboutHTM
    {
        get
        {
            if (Cache.Get("page.about") == null)
                lock (cacheLock)
                {
                    if (Cache.Get("page.about") == null)
                        Cache.Insert(File.ReadAllText(MenuPath + "\\About.htm"));
                }
            return Cache["page.about"].ToString();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您确实可以使用缓存或一些在Application_Start 中仅初始化一次并在稍后重用的变量,但恐怕您在这里进行了一些过早的优化。除非您确定这是您的应用程序性能的瓶颈,否则您可能不应该这样做。从磁盘读取文件是一种快速的操作,尤其是在它们很小的情况下。

      【讨论】:

      • 是的,我们遇到了页面加载缓慢的问题,并且它已经将菜单指向为罪魁祸首。
      • @Kolten,我明白了。然后尝试缓存,看看这是否能解决您的性能问题。
      • 在语句前后添加 Trace.Warn() 并启用 Page 的 Trace 选项。
      【解决方案3】:

      如果可能,我会将菜单数据存储在 XML 文件中,并缓存 XML 文件。

      XmlDocument xDoc = new XmlDocument();
      
      if (Cache.Get("MenuData") == null)
      {
          xDoc.Load(Server.MapPath("/MenuData.xml"));
          Cache.Insert("SiteNav", xDoc, new CacheDependency(Server.MapPath("/MenuData.xml")));
      }
      else
      {
          xDoc = (XmlDocument)HttpContext.Current.Cache.Get("MenuData");
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 2011-03-03
        相关资源
        最近更新 更多