2011-10-04 71 views
0

我有一個SharePoint2010網站,我創建了ASP.NET菜單控件。 的ASP.NET菜單的內容最初是空的,並且在我的Page_Load加載從標準的HTML文件,其內容在服務器上:如何將ASP.NET菜單控件放入緩存?

  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... 
} 

我注意到這是做事情一個可怕的方式。每次用戶加載頁面時,它都會觸及磁盤。

如何,我不是:

一)高速緩存的代碼和asp.net菜單項,以便它停留在記憶?

b)使用另一種方法確保它不從磁盤加載?

感謝

回答

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(); 
    } 
} 
0

你確實可以使用緩存或一些變量,在Application_Start初始化只有一次,以後重用,但恐怕你在這裏做一些不成熟的優化。除非您確定這是您應用程序性能的瓶頸,否則您可能不應該這樣做。從磁盤讀取文件是一項快速操作,特別是如果它們很小。

+0

雅,我們曾與頁面加載速度緩慢的問題,它是指向菜單的罪魁禍首已經。 – Kolten

+0

@Kolten,我明白了。嘗試緩存然後看看這是否會解決您的性能問題。 –

+0

在語句之前和之後添加Trace.Warn()並啓用頁面的跟蹤選項。 –

0

如果可能,我會將菜單數據存儲在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"); 
}