契机:
这两天写逐行分析文件的程序,文件是GB量级的,我用来分析的文件大小是2GB大小。
分析:
考虑到内存大小有限(内存2GB,磁盘128GB ssd,cpu:i5),那么不能将2GB的文件全部加载如内存,想到2个读取方法:
- c#本身有StreamReader类,可以通过指定path读取文件,并且有ReadLine的方法,逐行读取。
- 通过内存映射,将文件映射到虚拟内存空间,由操作系统管理,需要对虚拟内存中的数据进行分析,以"\r\n"为换行符。
读取效率比较:
1. 使用StreamReader对2GB文件进行读计时:
Stopwatch sw = new Stopwatch();
string path = @"c:\Users\Songrong\Desktop\zt.xyz";
sw.Start();
using (StreamReader sr = new StreamReader(path))
{
while (!sr.EndOfStream)
sr.ReadLine();
}
sw.Stop();
Console.WriteLine("Elapsed time: {0} ms", sw.ElapsedMilliseconds);
Console.Read();
//Output
Elapsed time: 15500 ms
<