最终确定C#中的方法指南和最佳实践

lys*_*cid 2 .net c# coding-style finalize

我最近遇到了一个与在Finalize方法重载中运行的代码有关的问题.

我大部分都知道与内存管理/性能有关的问题,但我感兴趣的是,是否有任何关于"哪些代码应该/不应该用于Finalize方法"的指南?

例如:

  1. 不要在Finalize方法中抛出异常.
  2. 代码应该快速执行.
  3. 不要举起活动(?)
  4. 等等...

我的案例中的行为是由于引发的事件导致了一些异常.

所以我的问题是 - 关于finalize方法,我必须遵循哪些指导原则(甚至可能强制使用某些工具)?

Mic*_*out 7

最终确定只是为了摆脱非托管资源

来自MSDN

如果Finalize或Finalize的覆盖引发异常,并且运行时不由覆盖默认策略的应用程序托管,则运行时将终止该进程,并且不会执行活动的try-finally块或终结器.如果终结器无法释放或销毁资源,则此行为可确保进程完整性.

最终操作具有以下限制:

在垃圾收集期间执行终结器的确切时间未定义.除非调用Close方法或Dispose方法,否则不保证在任何特定时间释放资源.

两个对象的终结器不保证以任何特定顺序运行,即使一个对象引用另一个对象.也就是说,如果对象A有一个参考对象B并且都终结,对象B可能已经对象A的终结开始时敲定.

运行终结器的线程未指定