ASP.Net是否会从缓存的数据集中删除单个表以释放内存?

时间:2008-12-03 21:05:57

标签: asp.net caching dataset

我有一个奇怪的,零星的问题。

我有存储过程返回5个小表(例如,状态下拉列表的ID和文本描述等)。代码调用它并将返回的数据集放入ASP.Net缓存中。调用单独的方法从数据集中检索单个表到databind到我的Web应用程序中的控件。

只有在我的QA服务器中,一个表才会消失。该表将用于一个测试场景;但是,下次运行相同的方案时,一个表为空。进入MIA的表总是一样的(准确地说是表#4 of 5)。

如果ASP.Net WP需要内存,它是否可以从缓存的数据集中删除单个表,同时保持数据集的索引到位?

以下是缓存代码:

public static DataSet GetDropDownLists()
{
    DataSet ds = (DataSet)HttpContext.Current.Cache["DropDownListData"];

    if (null == ds)
    {
        // - Database Connection Information Here
        ds = db.ExecuteDataSet(CommandType.StoredProcedure, "Sel_DropDownListData");

        HttpContext.Current.Cache.Add("DropDownListData", ds, null, DateTime.Now.AddMinutes(20), TimeSpan.Zero, CacheItemPriority.Normal, null);
    }

    return ds;
}

以下是返回空表的方法示例:

public static DataTable GetStatusList()
{
    return GetDropDownLists().Tables[3]; 
}

同样,这只发生在我的QA服务器上,而不是当我的本地代码连接到QA数据库或单独的服务器上的任何东西进行我自己的开发测试时。

由于

2 个答案:

答案 0 :(得分:4)

ASP.NET缓存只能直接处理您在IEnumerable列表中插入的对象。

如果您添加列表<>将对象作为一个缓存项,它将保留整个列表,或者它将从缓存中丢弃整个列表。它永远不会绕过列表并从中删除单个项目。这同样适用于数据集中的表。

其他一些东西必须弄乱你的数据集。你确定表#4首先正确加载到你的QA服务器上(即它开始时不是空的吗?)

答案 1 :(得分:1)

缓存DataSet的事实并不重要。

无法从显式的DataSet中删除表。

你必须进行调试才能找到正在发生的事情,逻辑上是:

  • 该表已从DataSet中明确删除

  • DataSet已从缓存中删除,并在没有表

  • 的情况下重新生成