在C#中读取包含大量行的文本文件

Joh*_*nti 3 .net c# io readline streamreader

我有一个文本文件,可能有多达1百万行,我有一个代码一次读取一行文件,但这需要花费很多时间......很多很多时间.c#中是否有一种方法可以优化此过程,并提高读数.这是我正在使用的代码.

using(var file = new StreamReader(filePath))
{
    while((line = file.ReadLine()) != null)
     {
         //do something.
     }
}
Run Code Online (Sandbox Code Playgroud)

有关批量阅读这些内容或改进流程的建议吗?

谢谢.

谢谢你们的评论.这个问题与\有关,我正在使用SmartXls库写入Excel,这导致瓶颈.我联系了开发人员来解决这个问题.所有建议的解决方案都适用于其他场景.

Jon*_*eet 6

好吧,这段代码会更简单,如果你使用的是.NET 4或更高版本,你可以使用File.ReadLines:

foreach (var line in File.ReadLines())
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不一样ReadAllLines,因为ReadLines返回一个IEnumerable<string>懒惰地读取行,而不是一次读取整个文件.

执行时的效果与原始代码大致相同(它不会提高性能) - 这只是更容易阅读.

从根本上说,如果你正在阅读一个大文件,这可能需要很长时间 - 但只读一百万行不应该花费很多时间.我的猜测是,无论你用线条做什么都需要很长时间.您可能希望并行化,可能使用生产者/消费者队列(例如via BlockingCollection)或TPL Dataflow,或者只使用Parallel LINQ Parallel.ForEach等.

您应该使用分析器来确定花费时间的位置.如果你从一个非常缓慢的文件系统阅读,然后它可能是真的是被抽空阅读.我们没有足够的信息来指导您,但您应该能够自己缩小范围.

  • 但OP询问有关提高绩效的问题.而这段代码与他的表现相同. (3认同)