【发布时间】:2013-11-13 17:18:37
【问题描述】:
编辑: @Everyone对不起,我觉得混淆int32的大小很傻。问题可以关闭,但由于已经有几个答案,我选择了第一个。 原始问题如下供参考
我正在寻找一种从非常大的文本文件中加载特定行的方法,我正计划使用 File.ReadLines 和 Skip() 方法:
File.ReadLines(fileName).Skip(nbLines).Take(1).ToArray();
问题是,Skip() 取 int 值,而 int 值限制在 200 万左右。对于大多数文件应该没问题,但是如果文件包含 2000 万行怎么办?我尝试使用 long,但 Skip() 的重载不接受 long。
行是可变的,长度未知,所以我无法计算字节数。
是否有不涉及逐行读取或将文件分成块的选项?这个操作一定很快。
【问题讨论】:
-
旁注:阅读2000万行文本不可能“非常快”。我认为你写什么代码来跳过行并不重要,因为大部分时间都花在从磁盘读取......
-
这个问题似乎跑题了,因为这个问题的前提是有缺陷的。 Int32 达到 20 亿左右。
-
Linq 也有方法
ElementAtOrDefault,它试图在序列中找到Nth 条目。但是N仍然是int(Int32)。您可以编写自己的扩展方法,它是long(Int64)。 -
@Alexei 你是对的。我测试了多达 400k 行的文件,性能还可以接受,但 2000 万行引入了太多的延迟——猜想是时候放弃暴力解决方案了。
标签: c# io large-files