c#2中的字节数组内存不足

时间:2013-06-19 05:14:37

标签: c#

FileStream fs = File.OpenRead(fullFilePath);
try
{
    Console.WriteLine("Read file size is : " + fs.Length);
    byte[] bytes = new byte[fs.Length]; //// **error this line**
    fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
    fs.Close();
    return bytes;
}
finally
{
    fs.Close();
}

read file size 2,885,760 KB。是错误//

**Arithmetic operation resulted in an overflow.**

3 个答案:

答案 0 :(得分:6)

该文件大小超过2GB 。问题是new byte[OverTwoBillionAndSome]exceeding the limits。如果长度 2GB,则不会发生此错误(尽管可能仍然不建议将其完全读入内存)。

考虑流式传输数据。

答案 1 :(得分:0)

byte[] bytes = new byte[fs.Length];

2,885,760超过2GB。你确定你的RAM有足够的空间吗?很可能不是,这就是你出现内存不足的原因。

即使RAM中有足够的空间,普通的32位也不能分配那么多的内存

答案 2 :(得分:0)

作为保罗said,问题是文件的大小。

但是使用.NET Framework 4.5,您可以使用<gcAllowVeryLargeObjects> Element来支持您使用总大小超过2 GB的对象。

  

在64位平台上,启用大于2千兆字节的阵列   (GB)总大小。

您只需更改配置设置,例如;

<configuration>
  <runtime>
    <gcAllowVeryLargeObjects enabled="true" />
  </runtime>
</configuration>