大規模なテキスト ファイル (10 GB 以上) の最後の 10 行を取得する: 効率的な C# アプローチ
10 GB を超える大規模なテキスト ファイルを扱う場合10GB の場合、最後の行を抽出するとパフォーマンスに問題が生じる可能性があります。 C# を使用してこれを効果的に実現する方法は次のとおりです:
コードの実装:
この一般化されたアプローチにより、抽出するトークンの数 (numberOfTokens)、ファイル パスを指定できます。 (パス)、エンコーディング (encoding)、およびトークン区切り文字(tokenSeparator):
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of tokens in file is less than numberOfTokens fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
仕組み:
これを利用することでこのアプローチを使用すると、巨大なテキスト ファイルの最後の行を効率的に抽出し、ファイルのサイズが大きいために生じる課題に対処できます。
以上がC# で 10 GB のテキスト ファイルから最後の 10 行を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。