在非常大的文本文件中读取的最佳方式是什么?是应该一次读取(ReadToEnd?)还是逐行读取? 这可能与: What's the fastest way to read a text file line-by-line?
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
String line = sr.ReadToEnd();
}
OR
System.IO.StreamReader file =
new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
// append to StringBuilder
}
是否应该将文本文件存储到字符串?还是StringBuilder?什么是最好的方法?
答案 0 :(得分:4)
不是关于什么更快,而是关于什么适合您的需求。
如果您不需要在任何给定的时间点将整个文件存储在内存中,则逐行读取它将使您免于不必要的内存消耗。你可以阅读一行,用它做一些事情,然后在阅读下一行之前丢弃它。在任何给定的时间点,只有最后一行存储在内存中*。
如果您确实需要存储整个文件内容,并且稍后在应用程序中可以从内存中访问,则读取整个文件可能会更好(除非您稍后将Environment.NewLine
拆分为 - 在这种情况下,最好逐行逐行阅读。
* - 稍微简化,StreamReader
会在临时缓冲区中保留一些额外的数据,以最大限度地减少从磁盘实际读取文件内容的次数。
答案 1 :(得分:0)
我认为两种情况之间没有区别。就时间复杂度而言,它将带有 O ( n )的n行文件,因为您基本上将文件的内容存储到实例中并使用在这两种情况下。只是我的观点。
更新:文件太大是件事,所以你不能这样做,因为它可能消耗大量内存。因此,最好的方法是尝试从文件中读取每一行,并在转到下一行之前读取此行的空闲内存。因此,它可能会更好。