我知道C#中的最大对象大小是2GB。每个特定的PC都有一个内存限制,它是32位或64位。
在我的应用程序中,我需要尽可能大的整数数组。所以我需要的是照顾OutOFMemoryException
,直到可以制作出最大的阵列!
我最终得到了以下代码:
private int[] AllIntegers()
{
int[] all;
int divider = 2;
try
{
all = new int[int.MaxValue];
}
catch (OutOfMemoryException)
{
all = new int[int.MaxValue / divider];
}
//Probably will fail again. how to efficently loop the catch again
for (int i = 0; i < all.Length; i++)
{
all[i] = i;
}
return all;
}
代码也会失败,我正在寻找的是一种正确的循环方式,直到可以制作数组!
答案 0 :(得分:2)
在尝试分配对象之前,使用System.Runtime.MemoryFailPoint
检查是否有足够的资源可用。
答案 1 :(得分:2)
编辑:我不喜欢这个想法,因为我认为持有如此大量的数据是错误的 (以及所有整数的数组?)
但是,这就是你要找的东西:
static int[] AllIntegers()
{
int iSize = int.MaxValue;
int[] all;
int divider = 2;
while (true)
{
try
{
all = new int[iSize];
break;
}
catch (OutOfMemoryException)
{
iSize = iSize/divider ;
}
}
//Probably will fail again. how to efficently loop the catch again
for (int i = 0; i < all.Length; i++)
{
all[i] = i;
}
return all;
}
<强> EDIT2:强> 也许用我们想要实现的目标来详细说明我们?
答案 2 :(得分:1)
在内存中保存如此大的数组始终不是一个好主意。
你不能将大数组分成小数组,并根据范围来加载适当的数组吗?