是否仅需要CER来保护AppDomain中的共享托管状态

本文关键字:共享 状态 AppDomain 保护 CER 是否 | 更新日期: 2023-09-27 18:21:51

我确实有一个操作必须作为一个整体可靠地执行,否则根本无法执行。

  1. 目标只是保持一些内存管理的共享状态的一致性
  2. 这些状态包含在应用程序域中。它们在此域之外不可见
  3. 因此,当域或过程被拆除时,我不必做出反应
  4. 我正在编写一个类库,用户可以从任何地方调用我的代码。然而,我的代码不调用任何用户代码,甚至不调用虚拟方法
  5. CLR可以托管


据我所知,我确实需要约束执行区域(CER),因为:

  1. CER只需要对抗臭名昭著的OutOfMemoryExceptionThreadAbortExceptionStackOverflowException
  2. 我的代码不进行任何分配,所以我不关心OutOfMemory(无论如何,分配不能在CER中进行)
  3. 如果发生堆栈溢出,进程无论如何都会被拆除(或者在某些托管场景中是域)
  4. 线程中止已经被延迟到finally块的末尾,并且我的代码已经在其中了


我对这些观点正确吗?你看到我需要CER的其他原因了吗?

是否仅需要CER来保护AppDomain中的共享托管状态

我终于找到了仍然需要CER的至少一个原因:即使我的代码没有进行任何分配,JIT编译器也可能必须在第一次执行时分配内存。

因此,需要放置CER来强制运行时提前JIT所有内容,并防止可能的OOM。