ReRegisterForFinalize SuppressFinalize现实生活中的例子

Nah*_*hum 6 .net c# garbage-collection suppressfinalize

我刚刚读过这篇文章," 垃圾收集:Microsoft .NET Framework中的自动内存管理 ",作者:杰弗里里希特,我想不出任何真实的生活样本使用ReRegisterForFinalizeSuppressFinalize.

有人能提供一些例子吗?

Han*_*ant 10

它在.NET框架中使用的一些地方,总是一个好看的地方.基本模式是:

  • 被处置的对象被重用.Dispose()方法调用了SuppressFinalize,因此需要重新注册(NativeWindow,RequestContextBase,TaskExceptionHolder类)
  • 终结者失败并发现异常.没什么可做的,但稍后重试.该代码包含if(!Environment.HasShutdownStarted &&!AppDomain.CurrentDomain.IsFinalizingForUnload()),以确保这样做有意义(DynamicResolver和LoaderAllocatorScout类)
  • 对象参与缓存方案并重新缓存(OverlappedData类)