Нужно ли вызывать dispose после каждого использования, хотя datatable хранится в кеше? - PullRequest
2 голосов
/ 28 ноября 2008

Простой кейс:

Я помещаю DataTable в Cache

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

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

Теперь возникает вопрос: должен ли я вызывать table.dispose () при каждом вызове, хотя он хранится в Cache? Значит объект всегда один и тот же? Или Cache будет каждый раз создавать копию?

thx:)

Ответы [ 3 ]

5 голосов
/ 28 ноября 2008

Все, что вы делаете - это сохраняете указатель в кеше ... Фактическая "таблица" все еще находится в куче, где хранятся все ссылочные типы .Net ... Вы не делаете ее копию ... Переменная в кеше просто не позволяет сборщику мусора стирать объект в куче ...

и нет, вы не хотите вызывать dispose, пока сам объект больше не требуется.

0 голосов
/ 09 декабря 2008

DataTable является управляемым ресурсом и не требует, чтобы его метод Dispose () вызывался для правильной очистки сборщиком мусора.

0 голосов
/ 28 ноября 2008

я считаю, что вы должны вызывать Dispose только один раз, когда вы полностью закончили с данными; вызов Dispose изменяет состояние объекта.

обратите внимание, что «кэшированный» не всегда означает «скопированный»!

...