Asp.net 缓存传递值或引用的数据集?

Asp.net 缓存传递值或引用的数据集?,asp.net,caching,dataset,cache-expiration,Asp.net,Caching,Dataset,Cache Expiration,我要缓存一个对象。在从中读取策略之前进行明显且普遍的检查 确保数据集对象的存在。由于数据集只是对对象的引用,所以缓存中的实际数据集可以在毫秒内消失,例如,在Frach循环的中间。 若有,这是: dataSet = ((DataSet)Cache["customerDataSet"]).Copy(); 应该更安全。尽管缓存仍可能在.Copy期间过期。我是对的还是这只是过度思考 简单测试: DataSet d = (DataSet)Cache["myKey"]; int i = 0; do {

我要缓存一个对象。在从中读取策略之前进行明显且普遍的检查

确保数据集对象的存在。由于数据集只是对对象的引用,所以缓存中的实际数据集可以在毫秒内消失,例如,在Frach循环的中间。 若有,这是:

dataSet = ((DataSet)Cache["customerDataSet"]).Copy();
应该更安全。尽管缓存仍可能在.Copy期间过期。我是对的还是这只是过度思考

简单测试:

DataSet d = (DataSet)Cache["myKey"];
int i = 0;
do
{
  i++;
} while (Cache["myKey"] != null);

Label1.Text = (Cache["myKey"] == null ? "gone with wind  " : null) + d.Tables[0].Rows.Count.ToString() + " took: " + i.ToString();

当缓存消失且数据集d仍然可访问时,do while结束。你想得对。

你的最后一句话是对的;缓存是易变的,所以我使用了ApplicationState,但仍然认为缓存可以更好地服务。
DataSet d = (DataSet)Cache["myKey"];
int i = 0;
do
{
  i++;
} while (Cache["myKey"] != null);

Label1.Text = (Cache["myKey"] == null ? "gone with wind  " : null) + d.Tables[0].Rows.Count.ToString() + " took: " + i.ToString();