3 回答

TA贡献1806条经验 获得超8个赞
如果您使用的是.NET 4.0或更高版本
这个File类有一个新ReadLines方法,它懒洋洋地枚举行而不是贪婪地将它们全部读入数组中ReadAllLines。所以现在你可以同时兼顾效率和简洁:
var lineCount = File.ReadLines(@"C:\file.txt").Count();
原始答案
如果你对效率不太感兴趣,你可以简单地写:
var lineCount = File.ReadAllLines(@"C:\file.txt").Length;
要获得更有效的方法,您可以:
var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
while (reader.ReadLine() != null)
{
lineCount++;
}
}
编辑:回答有关效率的问题
我说第二个更高效的原因是关于内存使用,不一定是速度。第一个将文件的全部内容加载到一个数组中,这意味着它必须分配至少与文件大小一样多的内存。第二个只是一次循环一行,所以它不必一次分配多行的内存。这对于小文件来说并不重要,但对于较大的文件,这可能是一个问题(例如,如果您尝试在32位系统上查找4GB文件中的行数,例如,那里根本不够用户模式地址空间来分配这么大的数组)。
在速度方面,我不希望它有很多。ReadAllLines可能有一些内部优化,但另一方面它可能需要分配大量内存。我猜对于小文件,ReadAllLines可能更快,但对于大文件来说速度要慢得多; 虽然告诉的唯一方法是使用秒表或代码分析器来测量它。

TA贡献1842条经验 获得超21个赞
如果简单的话,你的意思是一行代码很容易破译但机会效率低下?
string[] lines = System.IO.File.RealAllLines($filename);
int cnt = lines.Count();
这可能是了解多少行的最快捷方式。
你也可以这样做(取决于你是否在缓冲它)
#for large files
while (...reads into buffer){
string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);
}
还有其他许多方法,但上面的一个可能是你将要用的。
- 3 回答
- 0 关注
- 458 浏览
添加回答
举报