Вопрос

Есть ли у кого-нибудь хорошие статьи или руководства по правильному использованию dispose и IDisposable. Я пытаюсь объяснить это некоторым младшим разработчикам и хотел получить дополнительный материал, примеры и т. Д.

Это было полезно?

Решение

Хорошее место для начала - статья MSDN Шона Фаркаса http: // msdn.microsoft.com/en-us/magazine/cc163392.aspx . Полная статья написана Джо Даффи на http://www.bluebytesoftware.com /blog/2005/04/08/DGUpdateDisposeFinalizationAndResourceManagement.aspx с некоторыми последующими действиями в http://www.bluebytesoftware.com/blog/2008/02/18/IDisposableFinalizationAndConcurrency.aspx

Другие советы

Многие старые источники рекомендаций на этот счет подразумевают, что IDisposable каким-то образом связан с финализаторами. Обратите очень пристальное внимание на комментарии Херба Саттера на эту тему. НЕ спешите с выводом, что вам нужно написать финализатор, если вы реализуете IDisposable, чтобы «убедиться, что Dispose запускается в конце концов, в случае, если клиент забудет вызвать его». Это вообще не тот случай. Класс может реализовывать IDisposable, чтобы он мог выполнять различные вызовы управляемых объектов, которыми он владеет, например, Утилизируйте эти объекты по очереди. Это абсолютно бессмысленно делать с финализатором, потому что финализаторы не могут надежно обращаться к другим управляемым объектам. Кроме того, все, что делает финализатор, должно вызываться из любого потока. Финализаторы - очень непонятная вещь, в то время как IDisposable - это простой шаблон, который должен быть вездесущим. А появление SafeHandle еще больше меняет ситуацию .

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

using (MyDisposable obj = new MyDisposable())
{
  obj.some_stuff();

} //obj is disposed here
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top