编辑:@Everyone抱歉,我觉得与int32的大小混淆.问题可能已经结束,但由于已有几个答案,我选择了第一个答案.原始问题在下面供参考
我正在寻找一种从非常大的文本文件加载特定行的方法,我正在计划使用File.ReadLines和Skip()方法:
File.ReadLines(fileName).Skip(nbLines).Take(1).ToArray();
Run Code Online (Sandbox Code Playgroud)
问题是,Skip()需要一个int值,和INT的值被限制为200万左右.对于大多数文件应该没问题,但是如果文件中包含20万行呢?我尝试使用很长但没有超载的Skip()接受longs.
行是可变的,未知的长度,所以我不能计算字节数.
是否有一个选项不涉及逐行读取或以块的形式拆分文件?此操作必须非常快.
整数是32位数,因此限制在20 亿左右.
也就是说,如果你必须从文件中读取一个随机行,而你所知道的是文件中有行,你必须逐行读取它,直到你到达你想要的行.您可以使用一些缓冲区来稍微缓解I/O(默认情况下它们处于打开状态),但是您将无法获得更好的性能.
除非您更改文件的保存方式.如果您可以创建一个索引文件,包含主文件每行的位置,您可以更快地读取一行.
哦,不是无限的,一但有很多快-从O(N)几乎为O(1)(差不多,因为这取决于操作系统如何呢寻求一个随机字节的文件可能不是一个O(1)操作,它).
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |