Winforms Утилизация IDisposable - PullRequest
       17

Winforms Утилизация IDisposable

2 голосов
/ 23 октября 2008

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

Ответы [ 4 ]

6 голосов
/ 23 октября 2008

Хорошее место для начала - статья 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

1 голос
/ 23 октября 2008

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

0 голосов
/ 23 октября 2008

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

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

} //obj is disposed here
0 голосов
/ 23 октября 2008
...