简单案例:
我在缓存中放了一个数据表
DataTable table = SomeClass.GetTable();
Cache["test"] = table;
then in later calls i use
DataTable table = (DataTable)Cache["test"];
现在的问题是:我是否应该在每次调用时调用 table.dispose(),尽管它存储在缓存中?意味着对象总是相同的?或者缓存每次都会创建一个副本?
谢谢 :)
你所做的只是在缓存中存储一个指针......实际的“表”仍然在堆上,所有.Net引用类型都存储在其中......你没有复制它......缓存中的变量只是阻止垃圾收集器擦除堆上的对象......
不,在不再需要实际对象之前,您不想调用 dispose 。
我相信你应该只在完全完成数据表后调用一次 Dispose;调用 Dispose 会更改对象的状态。
请注意,“缓存”并不总是意味着“复制”!
DataTable 是一个托管资源,不需要调用它的 Dispose() 方法即可被垃圾收集器正确清理。