Метод dispose должен использовать только параметр распоряжения, чтобы решить, освобождать ли управляемые ресурсы.Неуправляемые ресурсы всегда должны быть освобождены.
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// Free managed resources
}
// always free unmanaged resources
_disposed = true;
}
}
если вызов Dispose происходит через сборщик мусора (= через вызов Finalizer), а удаление имеет значение false, вам не нужно освобождать управляемые ресурсы.Сборщик мусора также вызовет финализатор этих управляемых объектов (возможно, даже раньше).
Это то, что документация говорит :
Во второй перегрузкепараметр распоряжения - это логическое значение, указывающее, поступает ли вызов метода из метода Dispose (его значение равно true) или из финализатора (его значение равно false).
Тело метода состоит из двух блоков.кода:
Блок, освобождающий неуправляемые ресурсы.Этот блок выполняется независимо от значения параметра размещения.
Условный блок, освобождающий управляемые ресурсы.Этот блок выполняется, если значение распоряжения истинно.Управляемые ресурсы, которые он освобождает, могут включать:
Управляемые объекты, которые реализуют IDisposable .Условный блок может использоваться для вызова их реализации Dispose.Если вы использовали безопасный дескриптор для переноса неуправляемого ресурса, вам следует вызвать здесь реализацию SafeHandle.Dispose (Boolean).
Управляемые объекты, которые занимают большие объемы памяти или потребляют ограниченные ресурсы ,Явное освобождение этих объектов в методе Dispose освобождает их быстрее, чем если бы они были недетерминированно возвращены сборщиком мусора.
Если вызов метода происходит из финализатора (то есть, если удаление имеет значение false), тольковыполняется код, который освобождает неуправляемые ресурсы.Поскольку порядок, в котором сборщик мусора уничтожает управляемые объекты во время финализации, не определен, вызов этой перегрузки Dispose со значением false не позволяет финализатору попытаться освободить управляемые ресурсы, которые, возможно, уже были освобождены.