希望有人可以帮助我,我不知道!捕捉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
具有非常大的价值等取决于可用内存量,这有时会引发内存不足异常。
所以我一直试图做的是这样的:
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;
}
然后调用方法可以这样做:
private void CallingMethod(number)
{
if(CheckingMethod(number)
{
LongMethod(number);
}
}
我试图运行longMethod前检查,是否将导致OOM异常。我的问题是,difference
会给我一个截然不同的值,所以我有时仍然遇到outOfMemory异常。有一个更好的方法吗?
'数字'有多大?你分配的物体有多大? –
选择正确的数据类型是正确的方法... –
@MitchWheat数字是一个用户输入,其思想是允许可能的最高'数字',而不会引发异常。这就是我想要弄明白的。我想知道每个对象使用多少内存。 –