是否仅需要CER来保护AppDomain中的共享托管状态
本文关键字:共享 状态 AppDomain 保护 CER 是否 | 更新日期: 2023-09-27 18:21:51
我确实有一个操作必须作为一个整体可靠地执行,否则根本无法执行。
- 目标只是保持一些内存管理的共享状态的一致性
- 这些状态包含在应用程序域中。它们在此域之外不可见
- 因此,当域或过程被拆除时,我不必做出反应
- 我正在编写一个类库,用户可以从任何地方调用我的代码。然而,我的代码不调用任何用户代码,甚至不调用虚拟方法
- CLR可以托管
据我所知,我确实不需要约束执行区域(CER),因为:
- CER只需要对抗臭名昭著的
OutOfMemoryException
、ThreadAbortException
和StackOverflowException
- 我的代码不进行任何分配,所以我不关心OutOfMemory(无论如何,分配不能在CER中进行)
- 如果发生堆栈溢出,进程无论如何都会被拆除(或者在某些托管场景中是域)
- 线程中止已经被延迟到finally块的末尾,并且我的代码已经在其中了
我对这些观点正确吗?你看到我需要CER的其他原因了吗?
我终于找到了仍然需要CER的至少一个原因:即使我的代码没有进行任何分配,JIT编译器也可能必须在第一次执行时分配内存。
因此,需要放置CER来强制运行时提前JIT所有内容,并防止可能的OOM。