ser*_*hio 32 .net c# vb.net dispose memory-management
在方法中将自定义对象设置为null(Nothing在VB.NET中)是否有意义Dispose()?这可以防止内存泄漏或无用吗?!
让我们考虑两个例子:
public class Foo : IDisposable
{
private Bar bar; // standard custom .NET object
public Foo(Bar bar) {
this.bar = bar;
}
public void Dispose() {
bar = null; // any sense?
}
}
public class Foo : RichTextBox
{
// this could be also: GDI+, TCP socket, SQl Connection, other "heavy" object
private Bitmap backImage;
public Foo(Bitmap backImage) {
this.backImage = backImage;
}
protected override void Dispose(bool disposing) {
if (disposing) {
backImage = null; // any sense?
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 24
我个人倾向于; 有两个原因:
Foo(可能是从一个事件)任何下游对象(Bitmap在这种情况下)仍然可以收集(在将来的某个时候 - 只要GC感觉像这样); 这可能只是一个围绕非托管资源的浅层包装,但每一点都有帮助.
IDisposable是一个方便的"几乎杀死"开关 - 为什么不分离一切可用?ObjectDisposedException如果是的话就扔掉它nullBri*_*sen 20
目的Dispose()是允许清理垃圾收集器未处理的资源.对象由GC处理,因此在正常情况下实际上不需要将引用设置为null.
例外情况是,如果您希望调用者在此之后调用Dispose 并保留实例.在这种情况下,将内部引用设置为null是个好主意.然而,一次性实例通常同时被丢弃和释放.在这些情况下,它不会产生很大的不同.
| 归档时间: |
|
| 查看次数: |
5786 次 |
| 最近记录: |