我有一个要求,我需要读取一个非常大的文本文件(~2 Gb),但只能从特定行号开始直到文件末尾。
由于性能问题,我无法将整个文本加载到内存中。所以我用了
StreamReader
。但我注意到没有简单的方法可以从特定的行号开始“读取”,而是我所做的是我开始从第 1 行读取文件,并在到达所需的行号之前忽略所有行.
这是正确的做法吗?这是我尝试过的。有没有更好的方法来实现这一目标?
static string ReadLogFileFromSpecificLine(int LineNumber)
{
string content = null;
using (StreamReader sr = new StreamReader(LogFilePath))
{
sr.ReadLine();
int currentLineNumber = 0;
string line;
while ((line = sr.ReadLine()) != null)
{
currentLineNumber++;
if(currentLineNumber >= LineNumber - 1)
{
content += line + "\n";
}
}
}
return content;
}
这才是正确的做法。没有算法可以计算出特定线的偏移量并寻找它。
您可以通过两个循环来提高性能。一旦到达起始行,您就可以进入第二个循环,这不需要检查行号。但这最多只会对性能产生最小程度的影响。