OutOfMemoryExceptionを避ける

.NET2.0では新規にMemoryFailPointというクラスが用意されたようです。OutOfMemoryExceptionはメモリが不足したら発生しますが、MemoryFailPointクラスを使うと事前に確保可能かチェックすることが出来ます。
簡単な使用例。

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime;

class Foo
{
    public const int SizeMB = 1 * 1024;
    byte bytes;
    public Foo()
    {
        bytes = new byte[SizeMB * 1024 * 1024];  // 1GB;
    }
}

class Program
{
    static void Main(string args)
    {
        MemoryFailPoint mfp = null;
        try
        {
            // 指定したメモリが使用可能がチェックする
            // 使用出来ないようならInsufficientMemoryException例外
            mfp = new MemoryFailPoint(Foo.SizeMB);
            Foo f1 = new Foo();
            /*
            Foo f2 = new Foo();
            Foo f3 = new Foo();
            Foo f4 = new Foo();
            */
        }
        catch (InsufficientMemoryException e)
        {
            Console.WriteLine(e.Message);
        }
        catch (OutOfMemoryException e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            if (mfp != null)
                mfp.Dispose();
        }
    }
}

事前チェックに引っ掛かるとInsufficientMemoryExceptionが発生します。結局、例外が発生するのでOutOfMemoryExceptionと変わらないような気がするかも知れませんが、一連の処理の途中でOutOfMemoryExceptionが発生してすると整合性を取るための後処理が必要になるので、事前にメモリ不足になることが分かることが必要なケースもあります。