如何缓存数据源内容?

时间:2011-04-08 09:47:03

标签: asp.net

如何缓存数据源内容? 假设我正在从我的sql server数据库中检索一些记录,并将它们填入数据源或数据表中。 如何缓存数据源或数据表内容?

DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();
    DataSet ds = new DataSet();
    SqlCon.Open();
    string sq = "exec RetrieveLastVariableWorkerInfo @RealCode";
    SqlCom = new SqlCommand(sq, SqlCon);
    SqlCom.Parameters.Add("@RealCode", SqlDbType.NChar).Value = RealCode;
    da = new SqlDataAdapter(SqlCom);
    da.Fill(dt1);

2 个答案:

答案 0 :(得分:1)

基本上,您需要使用ASP.NET提供的Cache对象。这在您的应用程序中全局共享,并且存储在那里的任何对象都可用于所有页面请求。您可以指定对象应该保留在缓存中的时间量(绝对时间或滑动到期时间),并定义一个依赖项,如果它被触发,将删除缓存的对象,例如如果对数据来自的表进行了更改,则Sql依赖项将从缓存中删除该对象。
This MSDN article概述了该主题,特别是关于缓存API,使用对象缓存的部分 您可能还希望查看CacheDependency(在您的案例中特别是SqlCacheDependency)对象,以便在数据库中发生更改时刷新缓存的项目。
需要注意的事项是您存储的对象的大小,它们在过期之前的存储时间,应该从缓存中删除,以及是否应该有任何外部触发器将它们从缓存中删除。

答案 1 :(得分:0)

ASP.Net提供了几种用于存储数据的API。

Cache对象可用于存储任何对象。 API非常灵活。

Cache["MyObject"] = dt1;
Cache.Insert("MyObject", dt1)

这会将您的数据表放入系统缓存中。如果数据过时或者将其链接到外部依赖项(例如SQL服务器或文件),则可以在缓存上放置过期时间,以便外部引用中的更改自动使缓存无效。

值得注意的是,如果内存变紧,ASP.Net将自动清除缓存。您放置在缓存中的所有数据都可用于所有请求。

如果数据更具体地针对一个用户,则可以将数据表放入用户的Session对象中。会话通常通过唯一ID链接到一个用户的浏览会话。这样,您可以将几个不同的数据表读入内存而不会发生任何冲突。