所以我一直在寻找一种方法将文件的字节读入数组,我尝试使用File.ReadAllBytes()和FileStreams,但这两者似乎都无法支持超过2 GB的文件。有没有得到一个超过2 GB的文件的字节数组IN C#!
由于
答案 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左右的数据读入对象,直到您将文件读入内存为止。