当前位置: 首页 > 编程语言 > C#

concat两个字节返回System.OutOfMemoryException分享

时间:2023-04-10 20:35:39 C#

concat两个字节返回System.OutOfMemoryException我对concat两个字节[]有问题。其中之一有超过300,000,000字节。它抛出System.OutOfMemoryException类型的异常。我使用这段代码:byte[]b3=by2.Concat(by1).ToArray();谁能帮助我,因为Concat调用ToArray对结果数组的大小一无所知。它不会创建正确的大数组,它只是用数据填充它。所以它创建一个小的,然后当它满了时创建一个两倍大小的新的,等等,只要有更多的数据要填充。这样你只需要理论上更多的内存(b1.Length+b2.Length)*2。事情变得更加棘手,因为在某一点之后,这些大数组被分配到LOH上,并且不能像普通对象一样被GC轻易收集。这就是为什么在这种情况下不应该使用ToArray()并以老式的方式进行操作:分配一个大小等于组合源数组大小的新数组并复制数据。类似于:varb3=newbyte[b1.Length+b2.Length];Array.Copy(b1,b2,b1.Length);Array.Copy(b1,0,b2,b1.Length,b2.Length);它不能保证成功,但更有可能。然后执行比ToArray()快得多。在处理这些数据时,我认为您应该使用流(这当然取决于应用程序)。然后,您可以拥有处理数据的代码,而不是同时将它们全部加载到内存中,您可以创建一个专门的流类来充当两个流之间的连接。好吧,给你自己的错误信息,你没有空闲连续的~550Mb内存。也许它太分散了。嗯..你知道,来自系统的连续~600meg请求-我并不感到惊讶。这本身就是一个很大的块,您必须在内存中拥有源数组,这比1GB的原始数据块还多。您应该开始考虑其他数据结构,或者尝试将它们保存为文件并将它们映射到内存编辑:对整个文件进行内存映射需要地址空间中的相同连续区域,因此它不会解决任何问题。本回答将被删除。以上就是C#学习教程:concattwobyte返回System.OutOfMemoryException共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: