大家都知道,如果Menu是从数据库读取数据进行构建的话,会花不少时间,
有没有办法,把构建好的Menu放到APPLICATION 或CACHE 中去,下次用的时候就从APPLICATION 或CACHE 中加载进来,就会快很多,但我没有试成功,请高手出招以下是我的源码
if (Application["menu2"]==null)
{
    FreeControl.Web.BuildMenu bmu=new FreeControl.Web.BuildMenu();
    bmu.SelectFromTableName="TreeNode";
    bmu.NodeNavigateUrl="Products.aspx";
    bmu.DbConnection=new OleDbConnection(FreeControl.Data.ConnectionString.ConString);
    this.GiftMenu=bmu.BuildMenubar(this.GiftMenu,2));
    Application["menu2"]=this.GiftMenu;
}
else
{
   this.GiftMenu=(ComponentArt.Web.UI.Menu)Application["menu2"];
   //这行代码有运行,但是菜单就不见了
}

解决方案 »

  1.   

    .NET的缓存机制 用不到么?
      

  2.   

    如何在ASP.NET中使用缓存Caching
    http://www.cnblogs.com/hedonister/archive/2005/06/17/176065.html
      

  3.   

    我建议:如果系统常常用到TreeView,Menu之类的控件的话,可以Caching起来!!
      

  4.   

    Cache  userControl或者数据 /// <summary>
    /// generalUTL 的摘要说明。
    /// 这里存放一些基本的辅助函数
    /// 1,缓存相关的:设置,获取和清空,当数据发生更新的时候可以设置缓存,也可以直接清空缓存。
    /// </summary>
    public class generalUTL
    {
    #region 缓存相关的。
    /// <summary>
    /// 利用工厂模式设置缓存。
    /// </summary>
    /// <param name="key"></param>
    public static System.Data.DataTable setCache(string key)
    {
    System.Data.DataTable dt=new DataTable();
    Type t = Type.GetType("DreamZone.Core.sysCollection");
    MethodInfo method = t.GetMethod(key);
    dt=(System.Data.DataTable)method.Invoke(null,null);
    setCache(key,dt);  
    return dt;
    }
    /// <summary>
    /// 直接利用key和dt设置。
    /// </summary>
    /// <param name="key"></param>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static System.Data.DataTable setCache(string key,System.Data.DataTable dt)
    {
    //HttpContext.Current.Cache.Add(key,dt,null,DateTime.MaxValue,new TimeSpan(0,0,1,0),CacheItemPriority.High,null);
    HttpContext.Current.Cache.Add(key,dt,null,DateTime.MaxValue,new TimeSpan(0,0,1,0),CacheItemPriority.High,null);
    return dt;
    }
    /// <summary>
    /// 从缓存中获取,如果为空设置缓存
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static System.Data.DataTable getCache(string key)
    {  
    System.Data.DataTable dt=new DataTable();
    if(HttpContext.Current.Cache[key]!=null)
    {
    dt=(System.Data.DataTable)HttpContext.Current.Cache[key];  
    }
    else
    {  
    dt= setCache(key);
    }
     
    return dt;
    }
    /// <summary>
    /// 清空缓存
    /// </summary>
    /// <param name="key"></param>
    public static void clearCache(string key)
    {
    HttpContext.Current.Cache.Remove(key); 
    }
    #endregion
      

  5.   

    我也在做treeview这方面,楼主可不可以留个联系方式方便交流
      

  6.   

    树的操作用JS来完成吧还有把状态视图设为false 不要向服务端回发各种请求通过别的页面来处理服务端信息