0

全体として確実に実行する必要がある操作、またはまったく実行しない操作があります。

  1. 目標は、メモリ内で管理される一部の共有状態の一貫性を維持することだけです。
  2. これらの状態は、アプリケーション ドメイン内に含まれています。このドメインの外では表示されません。
  3. したがって、ドメインまたはプロセスが破棄されたときに対応する必要はありません。
  4. 私はクラス ライブラリを作成しており、ユーザーはどこからでも私のコードを呼び出すことができます。ただし、私のコードはユーザー コードを呼び出しておらず、仮想メソッドも呼び出していません。
  5. CLR はホストされている場合があります。


私の理解では、次の理由から、制約付き実行領域 (CER) は必要ありません。

  1. OutOfMemoryExceptionCER は、悪名高い、ThreadAbortExceptionおよびに対してのみ必要ですStackOverflowException
  2. 私のコードは割り当てを行わないので、OutOfMemory は気にしません (とにかく、CER 内で割り当てを行ってはなりません)。
  3. スタック オーバーフローが発生した場合、プロセスはいずれにせよ破棄されます (または、一部のホストされたシナリオではドメイン)。
  4. スレッドの中止は、finally ブロックが終了するまで既に遅延されており、私のコードは既にブロック内にあります。


私はそれらの点で正しいですか?CER が必要な他の理由はありますか?

4

1 に答える 1

0

最終的に、CER がまだ必要な理由が少なくとも 1 つ見つかりました。私のコードが割り当てを行わなくても、JIT コンパイラは最初の実行でメモリを割り当てる必要があるかもしれません。

したがって、ランタイムにすべてを事前に JIT させ、OOM の可能性を防ぐには、CER を配置する必要があります。

于 2014-09-16T13:50:48.463 に答える