0

我确实有一项操作必须作为一个整体可靠地执行或根本不执行。

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


据我了解,我不需要受限执行区域 (CER),因为:

  1. CER 只需要对付臭名昭著OutOfMemoryExceptionThreadAbortExceptionStackOverflowException.
  2. 我的代码没有进行任何分配,所以我不关心 OutOfMemory(无论如何分配不能在 CER 内完成)。
  3. 如果发生堆栈溢出,该进程无论如何都会被拆除(或某些托管场景中的域)。
  4. 线程中止已经延迟到 finally 块结束并且我的代码已经在一个块内。


我在这些方面是正确的吗?您是否看到我需要 CER 的其他原因?

4

1 回答 1

0

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

因此,需要放置 CER 以强制运行时预先对所有内容进行 JIT 并防止可能的 OOM。

于 2014-09-16T13:50:48.463 回答