如何缓存数据集以停止到db的往返?

时间:2010-09-11 17:40:16

标签: c# asp.net ado.net dataset

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

3 个答案:

答案 0 :(得分:4)

您的DAL是否会被其他任何应用程序使用?如果没有,那么您可以在DataSetCache中嵌入Session的缓存,具体取决于存储需要哪些功能。

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

Cache很好,因为它将自动过期(如果搜索数据不会经常更改,则使用滑动过期)并且您可以使用它存储搜索条件,以便其他用户也可以利用搜索,这将节省您可能会由多个用户调用DB。与使用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;
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果这是每个用户数据,请不要将大量数据缓存到会话或类似内容中,否则会严重阻碍网站扩展的能力。考虑在添加更多用户时内存中的信息量如何增长,以及当您需要使用多个站点服务器时会发生什么。

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

如果这是用于所有用户的数据,请务必对其进行缓存。你可以使用asp.net Cache。