UI をブロックしない大きなテキスト ファイル処理のための C# の最適化
C# アプリケーションで大きなテキスト ファイル (100 MB 以上) を処理するには、UI スレッドのブロックを防ぐために慎重な最適化が必要です。この記事では、ストリームを使用した効率的な方法と、非常に大きなファイルの場合のプロデューサー/コンシューマー パターンについて詳しく説明します。
主な質問と回答:
StreamReader
は UI をフリーズさせずに大きなファイルを非同期的に処理できますか? はい。 StreamReader
と BufferedStream
を組み合わせると、読み取りパフォーマンスが大幅に向上します。 バックグラウンド ワーカー内でチャンクを読み取ることで、UI スレッドのブロックを防ぎます。 ファイルの長さによって進行状況がわかります。
ストリーム サイズに基づいて StringBuilder
を事前に割り当てることはできますか? はい。 ファイル サイズが分かると、初期 StringBuilder
容量割り当てが可能になり、再割り当てが最小限に抑えられ、効率が向上します。
高度な最適化: 生産者/消費者モデル
ギガバイトのデータの場合、プロデューサー/コンシューマー パターンによりパフォーマンスが大幅に向上します。 プロデューサ スレッドは BufferedStream
を介して行を非同期的に読み取り、別のコンシューマ スレッドはデータを処理します。
コード例: 効率的なストリーム読み取り
この例は、最適な大きなファイルの読み取りのために BufferedStream
と StreamReader
を使用する方法を示しています。
<code class="language-csharp">using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (BufferedStream bs = new BufferedStream(fs)) using (StreamReader sr = new StreamReader(bs)) { // Process file content iteratively. }</code>
概要:
BufferedStream
とバックグラウンド ワーカー スレッドを採用することで、UI がフリーズすることなく、大きなファイルを効率的に読み込むことができます。 非常に大きなファイルの場合、プロデューサー/コンシューマー パターンによりパフォーマンスがさらに向上します。
以上がC#は、UIスレッドをブロックせずに大規模なテキストファイルを効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。