【发布时间】:2014-11-12 08:06:14
【问题描述】:
我有一个大文件,我需要将其复制到内存中以进行进一步处理。该软件适用于小于 2GB 的文件,但一旦它们超过此限制,我就会得到一个异常,即 ReadAllBytes 仅支持小于 2GB 的文件。
byte[] buffer = System.IO.File.ReadAllBytes(file); // exception if file > 2GB
将大于 2GB 的文件复制到内存的最快方法是什么?
进程已经是 64 位,并且标志 gcAllowVeryLargeObjects 已经设置。
【问题讨论】:
-
您可以增加最大值:msdn.microsoft.com/en-us/library/hh285054.aspx 但问题是:为什么需要一次将所有内容加载到内存中?使用基于流的方法。
-
分块读取并处理?或者让你的进程 64 位?
-
@Tim 和 Soner,我想如果进程是 32 位,仅此还不够。
-
@SriramSakthivel:你说得对,第一句话就提到了。但无论如何我都不会全部加载到内存中。
-
你想用这个文件做什么?我很确定您可以使用类似流的解决方案来实现这一点。或逐行阅读,如果您提供更多信息,我们可以帮助您找到基于流的解决方案,它的性能也会更高