调用" File.ReadAllBytes();"时出现SystemOutOfMemory异常

时间:2016-02-21 17:05:02

标签: c#

我正在呼叫File.ReadAllBytes(PATH);,我正在加载的文件非常大(大约2GB),我得到SystemOutOfMemory异常,我该如何解决这个问题?? 注意:该程序用于加载大文件! 提前谢谢。

编辑: 我试图获取这些字节,然后以某种方式压缩它们,然后将它们转换为字符串,然后将字符串重新转换为字节数组,然后再转换为文件。

1 个答案:

答案 0 :(得分:1)

使用BinaryReaderon MSDN的方法:

const int CHUNK_SIZE = 1024;

using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
    using (BinaryReader reader = new BinaryReader(stream, new ASCIIEncoding()))
    {
        byte[] chunk;

        chunk = reader.ReadBytes(CHUNK_SIZE);
        while (chunk.Length > 0)
        {
            DumpBytes(chunk, chunk.Length);
            chunk = reader.ReadBytes(CHUNK_SIZE);
        }
    }
}

DumpBytes()方法对你读过的字节做了一些有用的事情:

public static void DumpBytes(byte[] bytes, int length)
{
    ...
}

使用这种增量方法比一次加载文件更节省内存,并允许您在每次读取“数据块”时执行其他操作,例如更新用户界面等。 / p>