【问题标题】:How to store datatable in cache to reuse it?如何将数据表存储在缓存中以重用它?
【发布时间】:2011-10-13 11:38:19
【问题描述】:

在我的应用程序中,我使用 通用处理程序 来处理请求。

我想要这样的机制,比如如果第一次请求到达处理程序,它会向服务器发出请求,然后缓存整个数据表,所以对于即将到来的请求,如果下一个请求的产品代码存在于缓存的数据表中,它不应该去服务器再次获取数据。它应该只检查数据表的数据。

那么你能解释一下如何在缓存中设置数据表吗??

【问题讨论】:

    标签: c# asp.net caching


    【解决方案1】:

    类似的东西?

    public DataTable GetDataTableFromCacheOrDatabase()
    {
       DataTable dataTable = HttpContext.Current.Cache["secret key"] as DataTable;
       if(dataTable == null)
       {
           dataTable = GetDataTableFromDatabase();
           HttpContext.Current.Cache["secret key"] = dataTable;
       }
       return dataTable;
    }
    

    如果数据表发生变化,您将需要某种机制来从缓存中刷新数据表。例如,您可以使用SqlCacheDependency

    根据要求,在添加表一小时后清除缓存:

    HttpContext.Current.Cache.Insert("secret key", dataTable, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);
    

    【讨论】:

    • 不是线程安全的...如果在ifreturn 之间删除缓存条目会怎样?
    • @Thomas Levesque - 这不太可能。
    • @JonH,极不可能的事情一直在发生......如果它可能发生,它可能迟早会发生(这大致是墨菲定律背后的想法)
    • @Thomas Levesque - 我想你会权衡风险。并非一切都值得花时间或精力。
    • 不费吹灰之力。必须同意 Thomas 的观点,这种代码可能会咬你一口,当它发生时,追踪它所花费的时间至少是最初编写它所花费的时间的 10 倍。
    【解决方案2】:

    试试这个

     DataTable mytable;
     String key = "key"
     if(HttpContext.Current.Cache[Key] ==null)
     {
            mytable = GetDTFromDB();
            if(mytable.Rows.Count > 0)
                HttpContext.Current.Cache.Insert(strKey, mytable, Nothing, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);
        else
            mytable = HttpContext.Current.Cache[strKey];
      }
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      HttpContext.Current.Cache["CacheDataTableID"] = datatableInstance;
      

      【讨论】:

        【解决方案4】:

        你可以为你的表写一个属性

        public DataTable CachedTable  { get{ 
              if(Cache["CachedTable"] == null) 
             { 
               Cache["CachedTable"]= //get from databse 
              } 
              return Cache["CachedTable"]; 
            }  }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-05
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          • 2020-02-26
          • 1970-01-01
          • 1970-01-01
          • 2019-03-01
          相关资源
          最近更新 更多