gpt4 book ai didi

合并字节数组时 C# 内存不足异常

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:45 26 4
gpt4 key购买 nike

我在将大小为 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;
}

知道我哪里出错了吗?

最佳答案

在 32 位应用程序中,您很可能会遇到 OutOfMemoryException,因为您有(如果我理解正确的话)

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

由于数组需要在内存中连续,.NET 必须能够分配一个 500 MB 的大块,这是不太可能的。

我想在调试器中演示这一点,但是 this目前的问题阻止我这样做。 WinDbg 中的命令是 !address -summary,您需要查找最大的空闲 block 。

基本上它可能看起来像这样:

--- 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 可用空间,但单个 block 中只有 65 MB。

关于合并字节数组时 C# 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com