如何在缓存中存储数据表以重用它?

时间:2011-07-26 14:31:46

标签: c# asp.net caching

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

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

所以你能解释一下我如何在缓存中设置数据表。??

4 个答案:

答案 0 :(得分:24)

这些方面的东西?

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

答案 1 :(得分:4)

试试这个

 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];
  }

答案 2 :(得分:1)

你可以使用:

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

答案 3 :(得分:0)

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

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