组合字节数组时C#Out of Memory异常

时间:2015-09-29 15:56:05

标签: c# bytearray

在梳理大小为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;
}

知道我哪里错了吗?

1 个答案:

答案 0 :(得分:4)

在32位应用程序中,很可能会出现OutOfMemoryException,因为你有(如果我理解的话)

  • 10 MB的源数组
  • 另一个490 MB的源数组
  • 目标数组500 MB

由于数组需要在内存中连续,因此.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。