在大文本文件中阅读的最佳方式是什么(性能明智)?

时间:2015-11-22 03:04:46

标签: c# .net

在非常大的文本文件中读取的最佳方式是什么?是应该一次读取(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?什么是最好的方法?

2 个答案:

答案 0 :(得分:4)

不是关于什么更快,而是关于什么适合您的需求。

如果您不需要在任何给定的时间点将整个文件存储在内存中,则逐行读取它将使您免于不必要的内存消耗。你可以阅读一行,用它做一些事情,然后在阅读下一行之前丢弃它。在任何给定的时间点,只有最后一行存储在内存中*。

如果您确实需要存储整个文件内容,并且稍后在应用程序中可以从内存中访问,则读取整个文件可能会更好(除非您稍后将Environment.NewLine拆分为 - 在这种情况下,最好逐行逐行阅读。

* - 稍微简化,StreamReader会在临时缓冲区中保留一些额外的数据,以最大限度地减少从磁盘实际读取文件内容的次数。

答案 1 :(得分:0)

我认为两种情况之间没有区别。就时间复杂度而言,它将带有 O n )的n行文件,因为您基本上将文件的内容存储到实例中并使用在这两种情况下。只是我的观点。

更新:文件太大是件事,所以你不能这样做,因为它可能消耗大量内存。因此,最好的方法是尝试从文件中读取每一行,并在转到下一行之前读取此行的空闲内存。因此,它可能会更好。