Для того, что я читал в Интернете, вы всегда должны обращаться к объектам IDisposable
, как только они вам больше не нужны..Будет ли .Net call Dispose для меня в этом случае?
Этот вопрос касается конкретного случая, когда (для меня) очевидно, что объекты больше не нужны. и, возможно, Net может позвонить мне.
пример:
type Foo() =
let disposable:IDisposable = // create an IDisposable
...
Возникает вопрос: Как только foo
типа Foo
становится недоступным (кандидат для сбора мусора, никаких ссылок не указывает на него), будет disposable
получить утилизировать?
Я думаю, что disposable
не будут утилизировать, как только нет ссылок на foo
, так как нет никакого подсчета ссылок происходит в режиме реального времени (AFAIK), но может быть когда foo
получает сбор мусора .Net будет распоряжаться disposable
.
На данный момент я избегаю создавать одноразовые вещи в этом месте, поскольку мне не совсем понятно, кто должен вызывать dispose и даже если .Net вызывается dispose, я не знаю, как скоро это произойдет.
Нет, GC не вызывает 'Dispose' собранных предметов, GC не знает о' IDisposable' полностью , – Lee
Вам необходимо реализовать IDisposable в своем классе, если он владеет некоторым ресурсом, доступным [см. Здесь] (http://www.fssnip.net/dM) для простых примеров. – Sehnsucht
Dispose дает вам возможность очистить ресурс до сбора мусора приближается к уничтожению объекта. Не было бы никакого смысла в сборщике мусора, который вызывается Dispose, потому что к этому моменту слишком поздно извлекать выгоду из Dispose. –