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 はオブジェクトへの参照にすぎないため、キャッシュ内の実際の 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();

do-while は、キャッシュがなくなり、データセット d がまだアクセスできるときに終了します。あなたは正しかった - 考え過ぎ。

于 2014-12-01T20:29:38.050 に答える