在 C# 中从特定行号读取非常大的文本文件到末尾的有效方法

问题描述 投票:0回答:1

我有一个要求,我需要读取一个非常大的文本文件(~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;
    }
c# .net streamreader
1个回答
0
投票

这才是正确的做法。没有算法可以计算出特定线的偏移量并寻找它。

您可以通过两个循环来提高性能。一旦到达起始行,您就可以进入第二个循环,这不需要检查行号。但这最多只会对性能产生最小程度的影响。

© www.soinside.com 2019 - 2024. All rights reserved.