C# 调用“时出现SystemOutOfMemory异常”;ReadAllBytes()文件&引用;
我正在调用C# 调用“时出现SystemOutOfMemory异常”;ReadAllBytes()文件&引用;,c#,C#,我正在调用File.ReadAllBytes(PATH),我正在加载的文件非常大(大约2GB),我遇到了一个SystemOutOfMemory异常,我如何解决这个问题?? 注意:该程序用于加载大文件! 提前谢谢 编辑: 我试图获取这些字节,然后以某种方式压缩它们,然后将它们转换为字符串,然后将字符串重新转换为字节数组,然后再转换为文件。使用二进制读取器的方法,如图所示: 其中,DumpBytes()方法对您读取的字节执行一些有用的操作: public static void DumpBytes(
File.ReadAllBytes(PATH)
,我正在加载的文件非常大(大约2GB),我遇到了一个SystemOutOfMemory
异常,我如何解决这个问题??
注意:该程序用于加载大文件!
提前谢谢
编辑:
我试图获取这些字节,然后以某种方式压缩它们,然后将它们转换为字符串,然后将字符串重新转换为字节数组,然后再转换为文件。使用
二进制读取器的方法,如图所示:
其中,DumpBytes()
方法对您读取的字节执行一些有用的操作:
public static void DumpBytes(byte[] bytes, int length)
{
...
}
使用这种增量方法将比一次性加载文件更节省内存,并且允许您在每次读取“一块”数据时执行其他操作,例如更新用户界面等。一点一点地读取…您真的需要将整个文件加载到内存中吗?你能改成流媒体吗?你在干什么?你好,欢迎。请显示您正在使用的代码。对于您描述的非常大的文件,我建议您不要使用ReadAllBytes()
方法,而是使用StreamReader
。不要这样做。读入一点文件,压缩它,写出一点文件,重复直到完成。不要使用字符串作为二进制存储。我认为增量方法是最好的。请参阅MSDN上的BinaryReader.ReadBytes
。您可以一次读取一个块到缓冲区,在运行时更新进度,等等。
public static void DumpBytes(byte[] bytes, int length)
{
...
}