2008-11-28 3 views
2

Простой случай:Должен ли я вызывать dispose после каждого использования, хотя datatable хранится в кеше?

я поставил DataTable в кэш

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

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

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

ТНХ :)

ответ

5

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

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

+0

+1 для четкого ответа – 2008-11-28 18:12:35

0

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^