gpt4 book ai didi

c# - 连接两个字节 [] 返回 System.OutOfMemoryException

转载 作者:行者123 更新时间:2023-11-30 13:31:25 25 4
gpt4 key购买 nike

我在连接两个字节 [] 时遇到问题。其中之一有超过 300,000,000 字节。它抛出 System.OutOfMemoryException 类型的异常。

我使用这段代码:

byte[] b3 = by2.Concat(by1).ToArray();

任何人都可以帮助我

最佳答案

因为 Concat 调用 ToArray 不知道结果数组必须有多大。它不能创建适当的大数组,只能用数据填充它。所以它创建一个小的,然后当它已满时创建一个两倍大小的新的,等等,只要有更多的数据要填充,就会一遍又一遍。这样你就需要比理论上更多的内存 (b1.Length + b2.Length) * 2。事情变得更加棘手,因为在某些时候这些大数组被分配到 LOH 上,并且 GC 不会像普通对象那样容易地收集它。

这就是为什么在这种情况下你不应该使用 ToArray() 而是使用老式的方法:分配大小等于源数组大小的新数组并复制数据。

类似于:

var b3 = new byte[b1.Length + b2.Length];
Array.Copy(b1, b2, b1.Length);
Array.Copy(b1, 0, b2, b1.Length, b2.Length);

它并不能保证成功,但会增加成功的可能性。并且执行速度比 ToArray() 快得多。

关于c# - 连接两个字节 [] 返回 System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656973/

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