作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 C# 类,我想在处理我的类时正确关闭一些通信端口。但是,当我退出程序时,永远不会调用终结器。这是为什么?我做错了什么吗?
我正在手动调用 dispose 来完成并关闭所有通信。这也不会被触发。
这是我正在使用的终结器:
~Power()
{
Dispose(false);
}
最佳答案
终结器(也就是您在此处使用的)仅在终结阶段调用,这将在 GC 期间发生。
如果您正确实现了 IDisposable,则永远不会调用它。我在 my series on IDisposable 上对此进行了详细介绍.
也就是说,如果您的“通信端口”是通过托管类处理的,那么您根本不应该使用终结器。这增加了对您没有任何帮助的开销。只需(正确地)实现 IDisposable,并在需要时让端口类周围的托管包装器处理终结。
关于c# - 未调用终结器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200848/
据我所知,不能保证 Object.finalize() 总是被调用。但是如果有重要的非GC资源,并且用户没有意外调用close(),我该如何释放该资源?PS。 .NET中的Object.Finaliz
我是一名优秀的程序员,十分优秀!