如何从大文件中读取特定行?

时间:2016-12-09 12:16:16

标签: c# .net linq file-io

我遇到了以UTF-8编码的单行格式大文件的问题。文件中的行具有恒定长度。

该文件平均有300k行。时间是主要的约束,所以我想尽可能以最快的方式做到这一点。

我试过LinQ

    File.ReadLines("file.txt").Skip(noOfLines).Take(1).First();

但时间不够令人满意。

我最大的希望是使用流,并将其设置为所需的行开头,但问题是以字节为单位的行大小不同。

任何想法,怎么做?

1 个答案:

答案 0 :(得分:1)

现在这是你不想使用linq的地方( - : 实际上,您希望在文件中找到第n次出现的新行并读取一些内容直到下一个新行。

您可能还想查看有关内存映射文件的此文档: https://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile(v=vs.110).aspx

还有一篇文章比较了不同的访问方法 http://cc.davelozinski.com/c-sharp/fastest-way-to-read-text-files