我有一个c#类。每当这个课程不再使用时,我想做一些事情。例如,记录当前状态等等。
我想确保每次不再使用该类时都会运行此方法。 我不想只使用一个简单的方法,因为我不能确定每个用户都在调用它。
我没有资源(比如文件句柄)来清理。
使用析构函数的最佳方法是什么?
“未使用”是指(例如):
答案 0 :(得分:2)
不,这不是最好的方式,析构函数代价高昂。
最好的方法是添加Close()或Dispose()
(IDiposable接口)方法。
但是你需要非常仔细地定义“不再使用”的含义,如果你想要额外的麻烦来管理和跟踪它。
您可以使用析构函数来自动化它,但最好是使用该条件(仅限Debug配置)。还要考虑destuctor实现“非确定性”终结。
答案 1 :(得分:2)
这取决于。 C#.NET利用垃圾收集器隐式清理对象。通常,您无法控制对象的清理 - 垃圾收集器就是这样做的。如果您愿意,可以在类中实现析构函数,但是可能会受到性能影响。 MSDN会在destructors上说明这一点:
通常,C#不需要所需的内存管理 当您使用不以运行时为目标的语言进行开发时 垃圾收集。这是因为.NET Framework垃圾 collector隐式管理内存的分配和释放 你的对象。但是,当您的应用程序封装非托管时 您应该使用Windows,文件和网络连接等资源 使用析构函数来释放这些资源。当对象符合条件时 对于销毁,垃圾收集器运行的Finalize方法 对象
最后是表现:
当一个类包含析构函数时,会在该类中创建一个条目 完成队列。当析构函数被调用时,垃圾收集器 被调用来处理队列。如果析构函数为空,这只是 导致不必要的性能损失。
除了析构函数之外,还有其他方法可以管理资源:
答案 2 :(得分:0)
如果你想在完成后运行某些东西,你应该实现IDisposable。