我有一个奇怪的,零星的问题。
我有存储过程返回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数据库或单独的服务器上的任何东西进行我自己的开发测试时。
由于
答案 0 :(得分:4)
ASP.NET缓存只能直接处理您在IEnumerable列表中插入的对象。
如果您添加列表<>将对象作为一个缓存项,它将保留整个列表,或者它将从缓存中丢弃整个列表。它永远不会绕过列表并从中删除单个项目。这同样适用于数据集中的表。
其他一些东西必须弄乱你的数据集。你确定表#4首先正确加载到你的QA服务器上(即它开始时不是空的吗?)
答案 1 :(得分:1)
缓存DataSet的事实并不重要。
无法从显式的DataSet中删除表。
你必须进行调试才能找到正在发生的事情,逻辑上是:
该表已从DataSet中明确删除
DataSet已从缓存中删除,并在没有表