2

単純なケース:

DataTableをキャッシュに入れます

DataTable table = SomeClass.GetTable();
Cache["test"] = table;

then in later calls i use
DataTable table = (DataTable)Cache["test"];

ここで問題は、キャッシュに保存されていても、呼び出しごとにtable.dispose()を呼び出す必要があるかどうかです。オブジェクトが常に同じであることを意味しますか?または、キャッシュは毎回コピーを作成しますか?

どうも :)

4

3 に答える 3

5

ポインタをキャッシュに格納するだけです...実際の「テーブル」はまだヒープ上にあり、すべての.Net参照型が格納されています...コピーを作成していません...キャッシュ内の変数ガベージコレクタがヒープ上のオブジェクトを消去するのを防ぐために機能するだけです...

いいえ、実際のオブジェクトが不要になるまで、disposeを呼び出したくありません。

于 2008-11-28T18:06:12.233 に答える
0

データテーブルが完全に使い終わったら、Disposeを1回だけ呼び出す必要があると思います。Disposeを呼び出すと、オブジェクトの状態が変更されます。

「キャッシュ」は必ずしも「コピー」を意味するわけではないことに注意してください。

于 2008-11-28T18:04:23.360 に答える
0

DataTable はマネージド リソースであり、ガベージ コレクションによって適切にクリーンアップするために Dispose() メソッドを呼び出す必要はありません。

于 2008-12-09T19:31:21.150 に答える