|
|
1
8
如果此对象符合垃圾收集的条件,并且没有对套接字的其他引用,则 终结器可能在对象的终结器之前运行。我想这就是这里发生的事情。 对非托管资源的引用,这些资源几乎总是以intptr的形式存在。有序关闭应该是标准-终结器通常只在程序正在关闭或者有人忘记处理要启动的实例时运行。 (我知道你一开始就澄清了这不是你的代码-我只是想解释一下为什么它有问题。如果你已经知道了一些/所有这些,我向你道歉。) |
|
|
2
4
由于垃圾收集器和终结器的工作方式,只有在类是 直接的 非托管资源的所有者,如窗口句柄、GDI对象、全局句柄或任何其他类型的IntPtr。 终结器不得尝试处置或甚至使用托管资源,否则您将有调用终结或处置对象的风险。 very important Microsoft article 有关垃圾收集工作原理的更多详细信息。此外,这是上的MSDN参考 Implementing Finalize and Dispose to Clean Up Unmanaged Resources ,请仔细查看底部的建议。 简言之:
|
|
|
3
0
新信息:看起来我实际上有两个问题,但是线程一个 appears 这是相当有毒的。
该链接中还包含一些非常有趣的社区内容,包括 "Thread.Abort is a Sign of a Poorly Designed Program" 所以至少我现在有一些弹药可以换了:) |
|
|
user1907570 · 如何在退出类的任何方法时自动释放连接? 9 年前 |
|
|
Dat Chu · 检查在收集对象之前是否调用了方法 12 年前 |
|
|
avo · 为什么WeakReference.IsAlive变为false? 12 年前 |
|
|
avo · GC调用Object.Finalize时,子对象是否仍然有效? 12 年前 |
|
|
ben ben · Java和C的终结器# 12 年前 |