![]() |
1
3
你使用它的唯一原因(及其极具争议性)。
不这样做有很多原因,也有很多方法会出错。简言之,你很少有理由需要这么做,或者想这么做。 |
![]() |
2
1
除了给出的答案:终结器在运行时由垃圾收集器调用。 所以您不能依赖于在终结器中释放非托管资源的时间!因为它是未知的。 另外,终结器在另一个线程上运行,因此垃圾收集完成后,终结可能仍在运行!所以必须通过另一个垃圾收集来完全除去一个对象。 因此,第一个垃圾收集调用finalezrs,但对象未被收集(以及对象持有引用的对象),它将在第二个垃圾收集中被收集。 |
![]() |
3
0
带有终结器的对象经历两个GC阶段:第一次运行终结器,第二次实际收集对象并释放内存。除了增加GC压力和延迟内存释放回池之外,终结器还具有处理字段可能不处于有效状态的对象的功能。此外,在终结器线程上抛出异常会立即撕毁整个应用程序,而没有任何关于刚刚发生的事情的友好信息。
这就是为什么Dispose模式实现始终具有对
通常,如果您的应用程序能够在内存不足或线程中止以及随后的AppDomain卸载等严重异常中幸存下来,那么使用终结器可能非常复杂和棘手——这是SQL Server或IIS等应用程序的情况。 长话短说:除非必须使用终结器,否则不要使用终结器;如果必须使用终结器(例如,使用非托管资源),则有相当多的研究等待着您。 您可以在以下博客文章中找到有关此主题的更多文章: |
![]() |
4
0
这意味着对象的托管成员也将被收集或已经被收集(我不知道GC如何工作的细微差别)。
因此,已经没有必要清理托管成员,通常
当我们通过调用手动处理对象时
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |