【问题标题】:Are CER needed to merely protect shared managed states within an AppDomain?是否需要 CER 仅保护 AppDomain 中的共享托管状态?
【发布时间】:2014-09-15 12:47:28
【问题描述】:

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

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


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

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


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

【问题讨论】:

    标签: c# .net vb.net reliability cer


    【解决方案1】:

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

    因此,需要放置 CER 以强制运行时预先 JIT 一切并防止可能的 OOM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2016-05-07
      • 1970-01-01
      相关资源
      最近更新 更多