c#如何计算文本文件中的行数

Bra*_*rad 9 c#

这样做有什么问题吗?

int  i = new StreamReader("file.txt").ReadToEnd().Split(new char[] {'\n'}).Length
Run Code Online (Sandbox Code Playgroud)

Jul*_*iet 47

您发布的方法并不是特别好.让我们分开:

// new StreamReader("file.txt").ReadToEnd().Split(new char[] {'\n'}).Length
//     becomes this:
var file = new StreamReader("file.txt").ReadToEnd(); // big string
var lines = file.Split(new char[] {'\n'});           // big array
var count = lines.Count;
Run Code Online (Sandbox Code Playgroud)

你实际上把这个文件保存在内存中两次:一次读取所有行,一次将它拆分成一个数组.垃圾收集器讨厌这个.

如果你喜欢一个衬里,你可以写System.IO.File.ReadAllLines(filePath).Length,但仍然可以在一个数组中检索整个文件.如果你不打算坚持阵列就没有意义.

更快的解决方案是:

int TotalLines(string filePath)
{
    using (StreamReader r = new StreamReader(filePath))
    {
        int i = 0;
        while (r.ReadLine() != null) { i++; }
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在任何给定时间(最多)保存在内存中的一行文本.只要线条相对较短,它就会高效.


Kon*_*lph 6

那么,这样做的问题是在大文件上执行此操作时会分配大量内存.

我宁愿逐行读取文件并手动递增计数器.这可能不是单行,但它的内存效率更高.

或者,您可以以偶数大小的块加载数据并计算这些中的换行符.这可能是最快的方式.