RT
解决方案 »
- C#如何调用C++写的函数啊,急啊,狂散分!!!
- 每天一个设计模式(策略模式 -2011.4.18 星期一)期待提问和讨论
- 多线程实现timer控件刷新显示时间 如何做?
- 应用程序window2003下可以运行,xp下不行(xp安装了.netframework2.0的)
- 有没有人知道为什么在visual studio c#里的serialport控件不能引用了。
- 快晕了,大家过来看看。
- 关于C#和flash交互应用的问题
- 在线求助,技术问题?
- 如何实现windows图片的缩略图效果
- 请问在C#中怎么做多层的数据库应用程序, 应该怎么设计,怎么做OR mapping?
- 多服务器数据实时同步思路???
- +20翻转字符.
利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销。
IDisposable接口提供了一种机制,允许类的用户控制释放资源的时间,但需要确保执行Dispose()。
一般情况下,最好的方法是执行这两种机制,获得这两种机制的优点,克服其缺点。假定大多数程序员都能正确调用Dispose(),实现IDisposable接口,同时把析构函数作为一种安全的机制,以防没有调用Dispose()。
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vbalr/html/548eebe1-86c4-4377-b2f5-447cb8be3d90.htm仔细看看生存期就完全明白了,如楼上所说,无外乎就是IDisposable接口的一种实现的模式罢了回收肯定不会两次,在第一个Dispose它就消失了。
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
Me.disposed = True
End Sub看到没有,到了析构函数,是要判断对象的disposed是否为真的。如果已经释放,是不会再有什么动作的了。
只不过两者各有特点
析构函数缺乏确定性和对无用存储单元收集器性能的影响。特别是因为无用存储单元收集器很可能在不需要对象后过一段时间才调用,该对象引用的资源被占用的事件就会比较需要的时间长。此时建议用Dispose()方法