【问题标题】:How to Read A File More than 2 Gb Bytes into a Array in C#?如何在 C# 中将超过 2 Gb 字节的文件读入数组?
【发布时间】:2017-08-04 20:16:24
【问题描述】:

所以我一直在寻找一种将文件字节读入数组的方法,我尝试使用 File.ReadAllBytes() 和 FileStreams,但它们似乎都无法支持超过 2 GB 的文件。是否有任何获取 C# 中大于 2 gb 的文件的字节数组!

谢谢

【问题讨论】:

标签: c# arrays byte system.io.file


【解决方案1】:

默认情况下,任何单个对象的大小限制为 2 GB。

默认情况下,当您在 64 位 Windows 操作系统上运行 64 位托管应用程序时,您可以创建不超过 2 GB 的对象。但是,在 .NET Framework 4.5 中,您可以增加此限制。有关详细信息,请参阅元素。 64-bit Applications

如果您启用 gcAllowVeryLargeObjects,您可以超过 2 GB,但仍有以下限制:

数组中元素的最大数量是 System.UInt32.MaxValue。 <gcAllowVeryLargeObjects> Element

但是 gcAllowVeryLargeObjects 无法解决问题,因为您使用的是字节数组,由于元素数量限制为 2 GB。

目前,使用字节数组处理大于 2 GB 的文件的唯一方法是使用某种缓冲读取,每次处理文件的一部分,直到处理完整个文件。

【讨论】:

    【解决方案2】:

    No object can be larger than 2 GB

    您有两个选择:
    1. 使用Stream 读取和处理文件。
    2. 如果您使用的是 .NET 4.0,请使用 MemoryMappedFile

    将大文件加载到内存中没有什么好处。 这将花费您将文件读入内存(IO操作)和处理它的时间,更不用说获得OutOfMemory Exception的可能性。

    除非您绝对必须这样做,否则您可以使用流将每 1 GB 左右的数据读入一个对象,直到您完成将文件读入内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2014-12-05
      • 2022-09-29
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多