相关疑难解决方法(0)

最佳文件缓冲区读取大小?

我正在编写一个需要读取相当大的文件的应用程序.我一直想知道在现代Windows XP计算机上读取缓冲区的最佳大小是多少.我用Google搜索并发现许多例子,其中1024是最佳尺寸.

这是我的意思的片段:

long pointer = 0;
buffer = new byte[1024]; // What's a good size here ?
while (pointer < input.Length)
{
    pointer += input.Read(buffer, 0, buffer.Length);
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序相当简单,所以我不打算编写任何基准测试代码,但是想知道常见的大小是多少?

.net windows performance

19
推荐指数
1
解决办法
1万
查看次数

StreamReader.Readline()真的是计算文件中行数的最快方法吗?

在环顾四周的时候,我发现了很多关于如何计算出文件中行数的讨论.

例如这三个:
c#我 如何计算
文本文件中的行数确定文本文件中的行数
如何快速计算行数?

那么,我继续前进并最终使用了我能找到的最有效(至少是内存方式?)方法:

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

但是,当文件中的行本身非常长时,这将永远存在.真的没有更快的解决方案吗?

我一直试图使用StreamReader.Read()或者StreamReader.Peek()我不能(或者不知道如何)让它们中的任何一个一旦有'东西'(字符?文本?)就移动到下一行.

有什么想法吗?


结论/结果(根据提供的答案进行一些测试后):

我在两个不同的文件中测试了下面的5种方法,我得到了一致的结果,似乎表明普通的旧StreamReader.ReadLine()方法仍然是最快的方法之一......说实话,我对答案中的所有评论和讨论感到困惑.

文件#1:
大小:3,631 KB
行:56,870

文件#1的结果以秒为单位:
0.02 - > ReadLine方法.
0.04 - >读取方法.
0.29 - > ReadByte方法.
0.25 - > Readlines.Count方法.
0.04 - > ReadWithBufferSize方法.

文件#2:
大小
:14,499 KB 行:213,424

文件#1的结果以秒为单位:
0.08 - > …

c# lines readline streamreader peek

13
推荐指数
2
解决办法
2万
查看次数

如何在不读取的情况下获取文件中的行数

可能重复:
如何快速计算线?

我有一些文件包含逐行数据.

我想获取文件中的行数以向用户显示进度状态.(我在后台逐行读取这些文件)

我可以通过完全读取文件来完成此操作,但这些文件非常大,以至于我的应用程序不必要地消耗了RAM空间.

所以我想在不读取整个文件的情况下获取文件中的行数.

我怎样才能做到这一点?

c#

4
推荐指数
3
解决办法
2796
查看次数

标签 统计

c# ×2

.net ×1

lines ×1

peek ×1

performance ×1

readline ×1

streamreader ×1

windows ×1