誰かが私を助けることができると願って、私はアイデアがありません!OutOfMemory例外をキャッチするC#
私は、オブジェクトを作成してキューに入れる集中的な方法を持っています。それは次のようにたくさん見える:
private void LongMethod()
{
for (int i=0; i<number;i++)
{
for (int j=0; j<number; j++)
{
object o = new object();
queue.enqueue(o);
}
}
}
しかし、時にはnumber
は非常に大きな値を持っているので、使用可能なメモリの量に応じて、これは時々のOutOfMemory例外がスローされます。
それでは、私がやろうとしてきたことはこれです:私はそれかどうか、longMethodを実行する前にチェックしようとしてる
private void CallingMethod(number)
{
if(CheckingMethod(number)
{
LongMethod(number);
}
}
:
private bool CheckingMethod(number)
{
long initialValue = System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64;
object o = new object();
queue.Enqueue(o)
long difference = initialValue - System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64;
if(Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory <= difference * number * number)
{
return true;
}
return false;
}
そして、呼び出し元のメソッドを行うことができますOOM例外が発生します。私の問題はdifference
が私に劇的に異なる価値を与えることになるので、時にはoutOfMemory例外が発生することがあります。これを行うより良い方法はありますか?
「数字」はどれくらい大きいですか?割り当てているオブジェクトの大きさはどれくらいですか? –
正しいデータ型を選択するのが正しい方法です... –
@MitchWheatの数値はユーザーの入力です。考えられるのは、例外をスローせずに最高の数値を可能にすることです。それは私が把握しようとしているものです。各オブジェクトがどれだけのメモリを使用しているか知りたい。 –