我知道C#中的最大对象大小是2GB。此外,每个特定PC都有一个内存限制,不管是32位还是64位。如何处理OutOfMemoryException,直到它不再被抛出?
在我的应用程序中,我需要一个尽可能大的整数数组。所以我需要的是照顾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;
}
的代码也将失败,我所寻找的是能够进行循环数组直到有道!
你的情况是什么?你为什么需要这个?你真的需要在记忆中保存这么大的结构吗?为什么不使用动态增长列表? – 2011-12-18 12:52:36
即使您成功做到了,您也无法使用它。一旦用数组填充了操作系统允许的所有内存,就不会有任何可用内存来分配更多变量。 – Svarog 2011-12-18 12:56:43
@Darin我只是实现了极限。目前没有特别的情况。你的意思是使用'List'?那会是什么限制? –
2011-12-18 13:01:22