【发布时间】:2013-11-05 17:12:03
【问题描述】:
我的代码是:
int linenumber = File.ReadLines(path).Count();
但是大约 1 gig 大小的文件需要很长时间(大约 20 秒)。
那么有人知道解决这个问题的更好方法吗?
更新 6:
我已经测试了您的解决方案:
对于大约 870 mb 大小的文件:
方法一:{my codetime(seconds) : 13}
方法2:(来自MarcinJuraszek & Locke)(同){
time(seconds) : 12}
方法3:(来自Richard Deeming){time(seconds) : 19}
方法4:(来自user2942249){time(seconds) : 13}
方法5:(来自Locke){time(seconds) : 13与lineBuffer = {4096 , 8192 , 16384 , 32768} }相同
方法6:(来自Locke edition 2){time(seconds) : 9为Buffer size = 32KB,time(seconds) : 10为Buffer size = 64KB}
正如我所说,在我的评论中,有一个应用程序 (native code) 可以在我的电脑中的5 second 中打开此文件。因此这是not about h.d.d speed。
By Compiling MSIL to Native Code,区别was not obvious。
Conclusion:此时,Locke method 2 是faster,而不是其他方法。
所以我将他的帖子标记为Answer。但是如果有人find better idea,此帖子将打开。
我为帮助我的亲爱的朋友们 +1 vote upto solve the problem。
感谢您的帮助。有趣的更好的主意。 最好的祝福 聪明人
【问题讨论】:
-
您可以一次只加载一个文件块,然后将每个块中的换行符数相加。
-
根据您的硬盘速度,读取 1 gig 文件实际上可能需要很长时间,在这种情况下,您会受到 I/O 限制,并且没有编码技术 会提高速度。
-
@RobertHarvey,碎片化甚至可能在其中发挥作用。
-
@RobertHarvey:OP 已经在使用标记为重复的解决方案,并且发现它不够,因为该问题正在寻找“最简单”的方法来计算行号,而 OP 想要“最快”。这些问题的答案截然不同。
-
@SmartMan:只要确保你做好功课。你不能真的指望别人为你写你的应用程序。
标签: c# line-numbers