В настоящее время я пишу кусок кода, который делает некоторые запросы, которые возвращают объекты IDisposable (DirectoryEntry быть конкретными из экземпляра ADAM) и я в конечном итоге с кодом похож наLINQ запрос и IDisposable
using(var entry = (from result in results
let entry = result.GetDirectoryEntry()
where entry != null
select entry).Last())
{
//blah blah
}
но кто затем отвечает за удаление объектов, не возвращенных вышеуказанным запросом? или более, - это выше код, фактически отсутствующий вызов Dispose() для всех других записей, чем последний?
Я никогда не видел примера кода, который налагает физические объекты Linq. Сборщик мусора в конечном итоге очищает объекты, и если у вас нет чего-то вроде долговременного неуправляемого процесса по запросу Linq, ручное удаление не требуется. –
Только если код действительно реализует финализатор. Если не будет реализован финализатор, тогда ресурсы будут действительно течь. Не говоря уже о том, что это приводит к: а) Ресурсам, не находящимся в состоянии ASAP, и б) Продвижению объектов в более длинную очередь сбора мусора, которая может иметь влияние на производительность, если вы выделяете и уничтожаете множество объектов с помощью финализаторов. – Spence
Хороший избавитель должен выполнить свою работу, а затем вызвать GC.SuppressFinalize (this); – Spence