ユーザー提供のファイルを処理する必要があるメソッドがあり、ファイルが十分に複雑な場合、OutOfMemoryException
. これらの場合、メソッドが失敗しても問題ありませんが、アプリケーションを引き続き使用できるようにしたいのですが、問題は、OutOfMemoryException
アクションのすべてのコースがメモリを消費するため、取得した後は何もできないことです.
例外がスローされたら解放できるメモリを確保して、アプリケーションの残りの部分を続行できるようにすることを考えましたが、オプティマイザがこの割り当てを削除するようです。
public void DoStuff(string param)
{
try
{
#pragma warning disable 219
var waste = new byte[1024 * 1024 * 100]; // set aside 100 MB
#pragma warning restore 219
DoStuffImpl(param);
}
catch (OutOfMemoryException)
{
GC.Collect(); // Now `waste` is collectable, prompt the GC to collect it
throw; // re-throw OOM for treatment further up
}
}
簡単に言えば、私の質問は次のとおりです。
- 私が試みていることを行うためのより良い方法はありますか?
- そうでない場合、これが悪い考えである正当な理由はありますか?
waste
このアイデアが進むべき道であると仮定すると、JIT がd メモリを最適化しないように強制するにはどうすればよいですか?