ホームページ > バックエンド開発 > C++ > LINQ は、C# で大きなテキスト ファイルを読み取る際の効率と読みやすさをどのように向上させることができますか?

LINQ は、C# で大きなテキスト ファイルを読み取る際の効率と読みやすさをどのように向上させることができますか?

Mary-Kate Olsen
リリース: 2025-01-05 00:23:47
オリジナル
965 人が閲覧しました

How Can LINQ Improve Efficiency and Readability When Reading Large Text Files in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート