我有一个大文件(60mb),我正在将该文件读入一个字符串,然后我将该字符串返回给另一个方法。
现在,当我将文件读入字符串时,它会给系统内存异常。
有没有办法读取部分文件并将其附加到字符串? 如果没有办法解决这个问题?
static public string Serialize()
{
string returnValue;
System.IO.FileInfo file1 = new FileInfo(@"c:\file.txt");
returnValue = System.IO.File.ReadAllText(file1.ToString());
}
答案 0 :(得分:6)
你现在如何阅读文件? 您可以使用StreamReader类,并逐行读取文件(ReadLine方法) 您还可以在每次读取操作(读取方法)
时从文件中读取指定数量的字节答案 1 :(得分:3)
是的 - 它叫做流媒体。看看StreamReader Class。虽然我不确定为什么你想要一个字符串中的1个60MB。如果可能的话,可能最好一次处理一下(可能在你的场景中逐行进行?)。
而不是ReadAllText查看OpenRead并将返回的FileStream传递给StreamReader的构造函数,如果可能的话,请看一下这些行:
using (FileStream fs = File.OpenRead("c:\theFile.text"))
using (StreamReader sr = new StreamReader(fs))
{
string oneLine = sr.ReadLine();
}
答案 2 :(得分:1)
即使您逐行阅读(或部分通过流式传输),当您将其附加到单个字符串时,内存不足。正在压缩它的选项吗?如果没有,我可能会将JVM的maxHeap提升到512MB或类似。