LINQ による高度なファイル読み取り
各行が処理される個別の要素を表す 2 つのテキスト ファイルがあるとします。私たちの目標は、C# を使用してこれらのファイルを 1 行ずつ読み取る効率的で読みやすい方法を探索することです。
現在のアプローチ
現在、StreamReader を利用して各行を個別に読み取ります。 。この方法は単純ですが、大きなファイルの場合や特定の行を選択する必要がある場合には非効率になる可能性があります。
LINQ の活用
LINQ は、これを解決するための強力なアプローチを提供します。問題:
static IEnumerable<SomeType> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { SomeType newRecord = /* parse line */ yield return newRecord; } } }
このメソッドは反復子ブロックを使用して遅延行リーダーを実装します。 yield キーワードを使用すると、ファイル全体をバッファリングすることなく、一度に 1 つのレコードが返されます。
柔軟性の強化
メモリ消費の問題に対処するには、次のように変更できます。コードを少し変更しました:
static IEnumerable<string> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { yield return line; } } }
このメソッドはバッファリングせずに文字列のシーケンスを返します。その後、Where や Select などの LINQ 演算子を使用して、必要に応じて行をフィルター処理したり処理したりできます。
... var typedSequence = from line in ReadFrom(path) let record = ParseLine(line) where record.Active // for example select record.Key;
このコードは、ReadFrom メソッドを使用して遅延評価シーケンスを作成し、データを保持せずに複雑な操作を実行できます。
結論
LINQ を利用することで、メモリ内のファイル全体を大幅に改善できます。ファイル読み取りコードの効率性と可読性。遅延評価アプローチは不必要なメモリ消費を回避し、大きなファイルの処理や特定の行の選択に最適です。
以上がLINQ は、C# で大きなテキスト ファイルを読み取る際の効率と読みやすさをどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。