0

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

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

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

如果 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 数据库或单独服务器上的任何东西以进行我自己的开发测试时。

谢谢

4

2 回答 2

4

ASP.NET 缓存只能直接作用于您在其 IEnumerable 列表中插入的对象。

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

一定是其他东西弄乱了您的数据集。您确定表 #4 是否首先正确加载到您的 QA 服务器上(即,它不是空的吗?)

于 2008-12-03T21:18:16.133 回答
1

DataSet 被缓存的事实并不重要。

除了显式之外,不能从 DataSet 中删除表。

您必须进行调试以找出发生了什么,从逻辑上讲是以下之一:

  • 该表已从数据集中显式删除

  • DataSet 已从缓存中删除并在没有表的情况下重新生成

于 2008-12-03T21:21:17.097 回答