У кого-нибудь есть хорошие статьи или учебники по правильному использованию dispose и IDisposable. Я пытаюсь объяснить это некоторым младшим разработчикам и хотел получить дополнительный материал, примеры и т. Д.Winforms Disposing IDisposable
ответ
Хорошее место для начала - это статья MSDN от Shawn Farkas http://msdn.microsoft.com/en-us/magazine/cc163392.aspx. Окончательная статья - Джо Даффи (Joe Duffy) по телефону 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 changes the situation further.
Вот мой. :-)
Скажите им, чтобы всегда использовать с помощью заявления на одноразовых предметов.
using (MyDisposable obj = new MyDisposable())
{
obj.some_stuff();
} //obj is disposed here
- 1. StructureMap Disposing Container
- 2. Disposing UnitOfWork
- 3. Реализация IDisposable в подклассе, когда родитель также реализует IDisposable
- 4. Реализация IDisposable
- 5. Disposing ObjectResult <T>
- 6. StructureMap InstanceScope.Hybrid и IDisposable
- 7. Контроллеры и IDisposable
- 8. C# interop marshalling and disposing
- 9. Устранение элементов, реализующих IDisposable
- 10. Disposing MemoryStreams и GZipStreams
- 11. JFrame Not Disposing
- 12. Structuremap Disposing объекта DataContext
- 13. Disposing ViewModels & CanExecute Handlers
- 14. SharePoint SPSite Disposing
- 15. IDisposable + модель финализации
- 16. Почему System.Net.Mail.MailMessage реализует IDisposable
- 17. IDisposable Ошибки в Page_Init()
- 18. используя IDisposable через наследование
- 19. IDisposable с несколькими уровнями наследования
- 20. Декораторы и IDisposable
- 21. DRY IDisposable Pattern
- 22. Я правильно ли реализую IDisposable?
- 23. IDisposable Инициируется при вызове метода
- 24. CA1001: Выполнение Idisposable в ViewModel
- 25. ASP.NET MVC, Unity и IDisposable
- 26. Что такое ожидание IDisposable?
- 27. Общее правило для применения IDisposable
- 28. linq cache and disposing datacontext
- 29. DI: Обработка жизни IDisposable объектов
- 30. Реализация IDisposable для класса FileSystemWatcher
«Если вы создаете класс, который не использует неуправляемые ресурсы, тогда вы не должны реализовывать IDisposable». Откуда люди получают эту идею? –