2

简单案例:

我在缓存中放了一个数据表

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;调用 Dispose 会更改对象的状态。

请注意,“缓存”并不总是意味着“复制”!

于 2008-11-28T18:04:23.360 回答
0

DataTable 是一个托管资源,不需要调用它的 Dispose() 方法即可被垃圾收集器正确清理。

于 2008-12-09T19:31:21.150 回答