我知道IDisposable接口以及它在.net中的用法,但在我的脑海中有一个问题:如果我正在编写所有的托管代码,实现IDisposable接口有意义吗?
我知道何时以及如何使用Idisposible,但我的问题是,如果我编写的所有托管代码都是一个简单的类,那么如果我在这个类中实现IDisposable并进行一些清理,比如释放一些全局值,这有意义吗?
发布于 2010-10-12 01:40:08
不需要,您可能不需要使用IDisposble接口。但是,建议在某些情况下使用(我稍后可能会添加更多内容,因为我记得: ):
Dispose方法,您可以在其中关闭流。Form等,不会被GC释放,因为您的类的本地实现(可能)仍然挂接到这些事件中。您可以在Dispose中解除这些事件处理程序的连接;这也有助于GC。嗯..。我现在记不清更多了,但是如果这个类的行为很复杂,你可能需要重新考虑为什么你不想实现IDisposable接口。
发布于 2010-10-12 01:26:45
经验法则:如果您的类型具有本身为IDisposable的成员变量,或者如果它是非托管的,则需要实现IDisposable。GC在.NET中是非确定性的,而IDisposable为您提供了一种确定性的方法,不是回收内存,而是回收资源。因此,当Dispose()被调用时,GC不会立即释放您的内存,但您可以确定性地清理非托管资源(例如,确保您的数据库连接已关闭,并且您不会在服务器上设置最大连接数)。
发布于 2010-10-12 01:21:08
如果您有一个需要回收的资源(比如文件),那么您希望拥有IDisposible,以便显式地关闭它,而不是等待GC来完成它。
https://stackoverflow.com/questions/3908463
复制相似问题