当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《c#如何计算文本文件中的行数》经验,为你挑选了2个好方法。

这样做有什么问题吗?

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

Juliet.. 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;

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

如果你喜欢一个衬里,你可以写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;
    }
}

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



1> Juliet..:

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

// 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;

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

如果你喜欢一个衬里,你可以写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;
    }
}

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



2> Konrad Rudol..:

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

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

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

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有