在梳理大小为10MB的字节数组直到500MB主阵列时出现内存异常
我用来组合字节数组的方法是:
private byte[] Combine(byte[] mainarray, byte[] newarray)
{
byte[] c = new byte[mainarray.Length + newarray.Length];
System.Buffer.BlockCopy(mainarray, 0, c, 0, mainarray.Length);
System.Buffer.BlockCopy(newarray, 0, c, mainarray.Length, newarray.Length);
newarray = null;
mainarray = null;
return c;
}
知道我哪里错了吗?
答案 0 :(得分:4)
在32位应用程序中,很可能会出现OutOfMemoryException,因为你有(如果我理解的话)
由于数组需要在内存中连续,因此.NET必须能够分配500 MB的单个大块,这是不太可能的。
我想在调试器中演示这一点,但this问题目前阻止我这样做。 WinDbg中的命令是!address -summary
,您需要查找最大的空闲块。
基本上它可能看起来像这样:
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
<unclassified> 6007 57a86000 ( 1.370 Gb) 85.37% 68.48%
Free 268 19519000 ( 405.098 Mb) 19.78%
...
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
<unclassified> 66f0000 c041000 ( 192.254 Mb)
Free 71c97000 4109000 ( 65.035 Mb)
这意味着,有405 MB空闲,但单个块只有65 MB。