2010-09-11 72 views
2

我正在ASP.NET 1.1页面的C#中创建一个搜索结果页面。在我的数据层中,我有一个存储普通旧ADO.NET存储过程调用结果的DataSet。 DataSet有两个DataTable,我使用DataVIew来过滤和排序列。 我只想填充一次数据集,然后处理DataTable和派生的DataView,直到页面被卸载。 如何最好的将DataSet缓存在我的DAL中,以便它只填充PageLoad?我把它放在一个Cache对象,一个静态成员变量,一个属性......我没有任何花哨的实体模型或ORM,这是.NET 1.1。提前致谢。如何缓存数据集以停止往返数据库?

回答

4

您的DAL是否会被其他应用程序使用?如果没有,那么您可以根据存储需要哪些功能来嵌入DataSetCacheSession中的高速缓存。

Session将特定于用户,并在用户会话过期时得到清理,这意味着数据可能比需要的时间长很多。 More info on Session

Cache是不错的,因为它会自动失效(使用滑动过期如果搜索数据不会经常更改),你可以保存搜索标准与它,以便其他用户可以利用搜索以及这将节省您的来电可能由多个用户访问数据库。多位用户能够访问这些数据是使用Session的一大优势。 More info on Cache

如果您打算在其他apap中使用您的DAL,您可能希望应用程序自行执行缓存。

你只需要像一个包装:

// Consider this psuedo code for using Cache 
public DataSet GetMySearchData(string search) 
{ 
    // if it is in my cache already (notice search criteria is the cache key) 
    string cacheKey = "Search " + search; 
    if (Cache[cacheKey] != null) 
    { 
     return (DataSet)(Cache[cacheKey]); 
    } 
    else 
    { 
     DataSet result = yourDAL.DoSearch(search); 
     Cache[cacheKey].Insert(result); // There are more params needed here... 
     return result; 
    } 
} 
+0

我不认为我会再次使用此DAL,但我想尽量减少往返数据库的往返行程,并使搜索结果适用于多个用户。原始数据集对于所有用户都是通用的,尽管他们可以通过DataView对其进行过滤。谢谢您的帮助。 – Brendan 2010-09-13 14:06:16

1

有一些与.net 1.1协同工作的ORM,但是如果你不想使用它们,我会建议在缓存中填充一些东西,以便在需要时可以过期并重新获取数据。您也可以将它放入会话中(如果数据是用户特定的)或应用程序(如果不是)对象。

+0

出于兴趣David你会推荐什么ORM? – Brendan 2010-09-13 19:51:17

+0

NHibernate 1.0写入.net 1.1 – BlackICE 2010-09-14 16:07:37

0

如果这是每个用户的数据不缓存大量数据付诸会议或类似的,你都严重制约着你的网站的能力规模。考虑到添加更多用户时内存中信息量的增长情况,以及当您需要使用多个站点服务器时会发生什么情况。

而是修改过程,以便您只能检索需要显示的数据页面。

如果这是用于所有用户的数据,请将其缓存。你可以使用asp.net缓存。