Нужны ли CER только для защиты общих управляемых состояний в AppDomain?

У меня есть операция, которая должна быть надежно выполнена в целом или не выполняться вообще.

  1. Цель состоит только в том, чтобы сохранить согласованность некоторых управляемых в памяти общих состояний.
  2. Эти состояния содержатся в домене приложения. Они не видны за пределами этого домена.
  3. Поэтому мне не нужно реагировать, когда домен или процесс отключаются.
  4. Я пишу библиотеку классов, и пользователь может вызывать мой код из любого места. Однако мой код не вызывает никакого пользовательского кода, даже виртуальных методов.
  5. CLR может размещаться.


Насколько я понимаю, мне не нужны ограниченные области выполнения (CER), поскольку:

  1. CER нужны только против печально известных OutOfMemoryException, ThreadAbortException и StackOverflowException.
  2. Мой код не делает никакого распределения, поэтому я не забочусь об OutOfMemory (в любом случае выделения не должны выполняться в CER).
  3. Если произойдет переполнение стека, процесс в любом случае будет остановлен (или домен в некоторых сценариях размещения).
  4. Прерывание потока уже отложено до конца блока finally, а мой код уже находится в пределах одного.


Я прав в этих пунктах? Видите ли вы другие причины, по которым мне нужен CER?


person Victor Victis    schedule 15.09.2014    source источник


Ответы (1)


Наконец-то я нашел по крайней мере одну причину, по которой CER все еще нужен: даже если мой код не выполняет никакого выделения памяти, JIT-компилятору, возможно, придется выделить память при первом выполнении.

Поэтому установка CER требуется, чтобы заставить среду выполнения выполнить JIT все заранее и предотвратить возможный OOM.

person Victor Victis    schedule 16.09.2014