【发布时间】:2011-08-31 09:03:00
【问题描述】:
我尝试了unxutils'wc -l,但对于 1GB 文件它崩溃了。我试过这个 C# 代码
long count = 0;
using (StreamReader r = new StreamReader(f))
{
string line;
while ((line = r.ReadLine()) != null)
{
count++;
}
}
return count;
它在 4 秒内读取一个 500MB 的文件
var size = 256;
var bytes = new byte[size];
var count = 0;
byte query = Convert.ToByte('\n');
using (var stream = File.OpenRead(file))
{
int many;
do
{
many = stream.Read(bytes, 0, size);
count += bytes.Where(a => a == query).Count();
} while (many == size);
}
10 秒内阅读
var count = 0;
int query = (int)Convert.ToByte('\n');
using (var stream = File.OpenRead(file))
{
int current;
do
{
current = stream.ReadByte();
if (current == query)
{
count++;
continue;
}
} while (current!= -1);
}
需要 7 秒
有什么更快的方法我还没试过?
【问题讨论】:
-
@nCdy 添加为答案
-
您的个人资料运行时发现哪些是热点?
-
您确定要测试行数而不是文件系统吗?如果第一个测试加载文件以便缓存它,那么后续测试将运行得更快。确保你真的在测试你认为你在测试的东西。
-
+1 给吉姆·米歇尔。性能测试比大多数人想象的要复杂!
标签: c# streamreader wc