开发者

How can I place an ASP.NET menu control into cache?

I have a SharePoint2010 site that I have created an ASP.NET menu control for. The ASP.NET menu's content is initially empty, and on Page_Load I load its content from standard HTML files o开发者_如何学编程n the server:

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

I notice this is a horrible way to do things. It hits the disk every single time a user loads a page.

How can I either:

a) Cache the code and asp.net menu item so that it stays in memory?

b) Use another method to ensure it isn't loaded from the disk?

Thanks


You can wrap data load into property and use at least page Cache there:

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


You could indeed use the cache or some variable that is initialized only once in Application_Start and reused later but I am afraid that you are doing some premature optimization here. You probably shouldn't be doing it unless you have identified that this is a bottleneck for your application performance. Reading files from disk is a fast operation especially if they are small.


If possible, I would store the menu data in an XML file, and cache the XML file.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜