Простой случай:
я помещаю DataTable в кеш
DataTable table = SomeClass.GetTable();
Cache["test"] = table;
then in later calls i use
DataTable table = (DataTable)Cache["test"];
теперь вопрос: должен ли я вызывать table.dispose () при каждом вызове, хотя он хранится в кэше? Значит, объект всегда один и тот же? Или Cache будет создавать копию каждый раз?
Спасибо :)





Я считаю, что вы должны вызывать Dispose только один раз, когда вы полностью закончили с datatable; вызов Dispose изменяет состояние объекта.
обратите внимание, что «кэшировано» не всегда означает «скопировано»!
Все, что вы делаете, это сохраняете указатель в кеше ... Фактическая "таблица" все еще находится в куче, где хранятся все ссылочные типы .Net ... Вы не делаете ее копию ... Переменная в кеше просто останавливает сборщик мусора от стирания объекта в куче ...
и нет, вы не хотите вызывать dispose до тех пор, пока фактический объект больше не понадобится.
DataTable является управляемым ресурсом и не требует вызова метода Dispose (), чтобы его можно было должным образом очистить сборкой мусора.