我正在编写在Windows Server 2016上运行的.NET
应用程序,该应用程序会在一堆大文件上获取http信息。由于您可以并行下载它们,因此可以大大加快下载过程。不幸的是,一旦将它们下载,将它们花费很长时间才能将它们重新组合在一起。
需要合并2-4k个文件。将在其上运行的服务器具有足够的内存,接近800GB
。我认为使用MemoryStream
s存储下载的片段,直到它们可以顺序写入磁盘为止是有意义的。但我只能在消耗2.5GB
错误之前消耗大约System.OutOfMemoryException
的内存。该服务器有数百GB可用空间,我不知道如何使用它们。
最佳答案
MemoryStreams是围绕字节数组构建的。 Arrays cannot be larger than 2GB currently.
当您尝试将内容放入单个MemoryStream
中时,底层数组变得太大,因此是异常。
尝试将片段分开存储,并在准备好后将它们直接写入FileStream
(或您使用的任何东西),而无需首先尝试将所有片段连接为一个对象。