为什么在退出应用程序时处置对象?

时间:2017-02-18 10:52:35

标签: vb.net dispose

为什么我们在退出应用程序时处理对象?理论上,当我们关闭程序时,它不会被处理掉吗?

如果没有,它可以影响多少性能,即运行时使用的RAM量,如果没有处理掉的话?

2 个答案:

答案 0 :(得分:3)

如果您认真对待IDisposable 合同,那么,在程序终止之前处置任何内容都没有意义。作为关闭过程的一部分,CLR运行任何剩余对象的终结器。所以无论如何都要进行清理,调用Dispose()不会让它变得更快,对资源的使用完全没有影响。

但是,谨慎之处是恰当的。合同并不总是按照预期的方式使用。在使用对象之后必须进行一些清理并且很容易忘记这样做是很常见的。特别是Using语句非常很有吸引力,可以实现半自动化。你可以看到我在this answer中滥用它。我去了,因为方便,不可能不注意你忘了丢弃。一个非常无辜的人。但它并不总是那么无辜。例如,使用Dispose()来取消订阅事件是一种非常常见的犯罪。不是无辜的,当客户端程序员没有处理时,这是一个泄漏。虽然在程序关闭时跳过它仍然不是一个错误。但它可能会更糟,如删除文件或发送"再见"消息到另一台机器。

所以粗略的指导是你永远不必为处理而感到遗憾,这是一个很好的习惯。特别是如果它是其他人的代码。但更不用说如果是.NET Framework类,我现在还不能想到一个滥用合同的具体案例。

答案 1 :(得分:2)

虽然在正常情况下,允许系统正确折叠应用程序并释放资源和文件锁等通常就足够了,但还有其他原因可能导致您在终止应用程序时运行处置。

例如,如果要连接到远程位置或数据库并检出某种键,则正确终止应该包括返回该密钥并在另一端正确关闭连接。

此外,您可能正在使用临时文件进行日志记录或其他目的。当您的应用程序退出时,也可以清理它们,这是很好的编程方式。