【发布时间】:2008-10-22 21:14:46
【问题描述】:
有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我正在尝试向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。
【问题讨论】:
标签: c# winforms dispose idisposable
有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我正在尝试向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。
【问题讨论】:
标签: c# winforms dispose idisposable
Shawn Farkas http://msdn.microsoft.com/en-us/magazine/cc163392.aspx 的这篇 MSDN 文章是一个很好的起点。最终文章由 Joe Duffy 在http://www.bluebytesoftware.com/blog/2005/04/08/DGUpdateDisposeFinalizationAndResourceManagement.aspx 撰写,并在http://www.bluebytesoftware.com/blog/2008/02/18/IDisposableFinalizationAndConcurrency.aspx 进行了一些跟进
【讨论】:
许多关于此的旧建议来源暗示 IDisposable 以某种方式与终结器相关联。密切关注 Herb Sutter 关于这个主题的 cmets。如果您实现 IDisposable,请不要轻易得出结论,即您需要编写终结器,以“确保 Dispose 最终运行,以防客户端忘记调用它”。通常情况并非如此。一个类可以实现 IDisposable 以便它可以对其拥有的托管对象进行各种调用,例如依次处理这些对象。从终结器执行此操作绝对没有意义,因为终结器无法可靠地访问其他托管对象。此外,终结器所做的任何事情都必须能够从任何线程调用。终结器是一个非常晦涩的高级事物,而 IDisposable 是一个简单的模式,应该无处不在。以及 SafeHandle 的出现changes the situation further。
【讨论】:
【讨论】:
告诉他们始终对一次性对象使用 using 语句。
using (MyDisposable obj = new MyDisposable())
{
obj.some_stuff();
} //obj is disposed here
【讨论】: