如何以高效的方式编写1GB文件C#

Roc*_*cky 10 c# performance file

我有.txt文件(包含超过百万行),大约1GB,我有一个字符串列表,我试图删除字符串列表中存在的文件中的所有行并创建新文件,但它正在采取很长时间.

using (StreamReader reader = new StreamReader(_inputFileName))
{
   using (StreamWriter writer = new StreamWriter(_outputFileName))
   {
     string line;
     while ((line = reader.ReadLine()) != null)
     {
       if (!_lstLineToRemove.Contains(line))
              writer.WriteLine(line);
     }

    }
  }
Run Code Online (Sandbox Code Playgroud)

如何提高代码的性能?

Sco*_*ain 4

通过使用 PLINQ 并行完成工作,您可能会获得一些加速,而且从列表切换到哈希集也会大大加快检查速度Contains(HashSet对于只读操作来说是线程安全的。

private HashSet<string> _hshLineToRemove;

void ProcessFiles()
{
    var inputLines = File.ReadLines(_inputFileName);
    var filteredInputLines = inputLines.AsParallel().AsOrdered().Where(line => !_hshLineToRemove.Contains(line));
    File.WriteAllLines(_outputFileName, filteredInputLines);
}
Run Code Online (Sandbox Code Playgroud)

如果输出文件与输入文件的顺序相同并不重要,您可以删除它.AsOrdered()并获得一些额外的速度。

除此之外,您实际上只是受 I/O 限制,使其更快的唯一方法是获得更快的驱动器来运行它。