0

我要缓存一个对象。来自http://msdn.microsoft.com/en-us/library/ms227644(v=vs.80).aspx的阅读政策前明显且流行的检查

if (Cache["customerDataSet"] == null)
{
    dataSet = DataSetConfiguration.CustomerDataSet;
    Cache["customerDataSet"] = dataSet;
}
else
{
    dataSet = (DataSet)Cache["customerDataSet"];
}

确保数据集对象的存在。由于 dataSet 只是对对象的引用,因此缓存中的实际 dataSet 可以在几毫秒内消失,例如在 foreach 循环的中间。如果是这样,这个:

dataSet = ((DataSet)Cache["customerDataSet"]).Copy();

应该更安全。尽管缓存仍然可以在 .Copy() 期间过期。我是对的还是只是想多了?

4

1 回答 1

0

简单测试:

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 结束。你是对的——想多了。

于 2014-12-01T20:29:38.050 回答