首页 > 解决方案 > 在大文件中搜索性能差异

问题描述

我检查了两种在大文件中搜索的方法。我测试了 500mb 大小的文件。第一种方式花费了 9500 毫秒,第二种方式花费了 11500 毫秒。怎么会发生?缓冲比在每次迭代中访问资源要快。Linq 比 foreach 搜索更强大。内存分配有问题吗?

1:

  var __file = new System.IO.StreamReader(file);
  var line = "";
  while ((line = __file.ReadLine()) != null)
  {
      var firstOccurrence = line.Contains(contains);
   }

  __file.Close();

2:

  var lines = File.ReadAllLines(_file);
  var firstOccurrence = lines.FirstOrDefault(l => l.Contains(contains));

标签: c#

解决方案


在您的第一个代码片段中,您不会在找到匹配项时停止循环。尝试这样的事情:

while ((line = __file.ReadLine()) != null)
{
    var firstOccurrence = line.Contains(contains);
    if (firstOccurrence)
    {
        break;
    }
}

在您的第二个代码片段中,您将整个文件读入内存,然后开始逐行查看它。这与您的第一个代码片段不同,您在其中一次从磁盘读取文件一行。

等效的方法是File.ReadLines-- 逐行读取文件:

var firstOccurrence = File.ReadLines(_file).FirstOrDefault(l => l.Contains(Contains));

推荐阅读