如何在C#中将超过2 Gb字节的文件读入数组?

时间:2017-08-04 20:16:25

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

所以我一直在寻找一种方法将文件的字节读入数组,我尝试使用File.ReadAllBytes()和FileStreams,但这两者似乎都无法支持超过2 GB的文件。有没有得到一个超过2 GB的文件的字节数组IN C#!

由于

2 个答案:

答案 0 :(得分: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的文件的唯一方法是使用某种缓冲读取,一次处理文件的一部分,直到整个文件被处理完毕。

答案 1 :(得分:1)

No object can be larger than 2 GB

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

将大文件加载到内存中没有任何好处。 它会花费你把文件读入内存的时间(IO操作)和处理它的时间,而不是提到获得OutOfMemory Exception的高可能性。

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