MemoryFailPoint クラス (System.Runtime)
MSDN より抜粋
MemoryFailPoint クラスのインスタンスを作成すると、メモリ ゲートが作成されます。メモリ ゲートとは、大量のメモリを必要とするアクティビティを開始する前に、十分なリソースがあるかどうかをチェックすることです。チェックに合格しなかった場合、操作を開始できないようにする InsufficientMemoryException がスローされるため、リソース不足が原因となってアプリケーションが実行中に失敗する可能性が減少します。これにより、アプリケーションでは、パフォーマンスを低下させ、OutOfMemoryException や、コード内の任意の場所で OutOfMemoryException を誤って処理したことが原因で発生する状態の破損を避けることができます。
つまり、OutOfMemoryException という、ある意味天災的な例外を、事前に察知するためのクラスです。
処理を開始する前にこれを察知できるというのは、場合によっては大きなメリットとなりそうです。
ただし、MemoryFailPoint が InsufficientMemoryException をスローしなかった場合でも、メモリは論理的には確保されていますが物理的に確保されているわけではありません。従って、 OutOfMemoryException がスローされる可能性も残っているということです。
このクラス自体の使い方は簡単です。
コンストラクタ でメモリーサイズ ( 単位はMB ) を指定します。指定したサイズのメモリーが使用できない場合は、InsufficientMemoryException クラス (System) がコンストラクタからスローされます。
なお、使用後は必ず Dispose メソッド を呼び出す必要があることに注意します。 ( InsufficientMemoryException が発生したら呼べないけど、コンストラクタが例外投げた場合、CLR は即座にファイナライザを呼び出すから問題無し。 → 勘違いでした。CLR は即座にファイナライザを呼び出したりはしません。でも、例外が発生したらリソース確保もされないと思います。 )
ちなみに、InsufficientMemoryException は OutOfMemoryException の派生クラスです。
[ 参考 ]
プログラミング Microsoft .NET Framework 第2版
トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/141-07611253