c#类:做日志记录/内务管理,我应该使用析构函数吗?

本文关键字:我应该 析构函数 管理 日志 记录 | 更新日期: 2023-09-27 18:03:45

我有一个c#类。每当这个类不再使用时,我想做一些事情。例如记录当前状态等。

我想确保当该类不再使用时,每次都运行此方法。我不想只用一个简单的方法,因为我不能确定每个用户都在调用它。

我没有资源(如文件句柄)来清理。

是使用析构函数的最佳方式吗?

"not in use"表示(例如):

  • 用户在表单中使用我的类,并且表单是关闭的
  • 类在一个应用程序中使用,这个应用程序被关闭

c#类:做日志记录/内务管理,我应该使用析构函数吗?

看情况。c# . net利用垃圾收集器隐式地为您清理对象。通常情况下,您无法控制对象的清理——垃圾收集器可以做到这一点。如果愿意,可以在类中实现析构函数,但可能会影响性能。MSDN对析构函数有如下规定:

一般来说,c#并不需要太多的内存管理当您使用不以运行时为目标的语言进行开发时垃圾收集。这是因为。net框架是垃圾的内存分配和释放你的对象。但是,当应用程序封装非托管时资源,如windows、文件和网络连接,您应该使用析构函数释放这些资源。当对象符合条件时类的Finalize方法进行销毁对象。

和最后的性能:

当类包含析构函数时,在完成队列。当析构函数被调用时,垃圾回收器调用以处理队列。如果析构函数为空,这只是导致不必要的性能损失。

除了析构函数之外,还有其他方法来管理资源:

清理非托管资源

实现Dispose方法

using Statement (c# Reference)

不,这不是最好的方法,析构函数代价很高。

最好的方法是添加Close()或者Dispose() (IDiposable interface)方法。

但是你需要非常仔细地定义"不再使用"意味着什么,如果你想要额外的麻烦来管理和跟踪它。

可以使用析构函数来自动执行,但最好是有条件的(仅限调试配置)。还要考虑到析构函数实现了"非确定性"终结。

如果你想让某些东西在完成后运行,你应该实现IDisposable。