C で大量のバッファをバイナリ ファイルに効率的に書き込む
大量のデータをバイナリ ファイルに書き込むのは、特に高いデータを求める場合には困難になることがあります。パフォーマンス。この記事では、C でこのプロセスを高速化する手法について調査します。
パフォーマンスのボトルネック
std::fstream を利用した最初のアプローチでは、わずか 20MB/s しか達成できませんでした。同じ SSD 上でかなり高速なファイル コピー速度とのこの差は、最適化の可能性を示唆しています。
解決策 A: C スタイルのファイル処理への切り替え
C の使用スタイル ファイル処理 (FILE*) によりパフォーマンスが大幅に向上し、約 220MB/s の速度が達成されました。この方法では、中間層をバイパスし、オペレーティング システムのファイル システムと直接やり取りして、オーバーヘッドを削減しました。
解決策 B: ストリーム同期の無効化
std::ios_base とのストリーム同期の無効化::sync_with_stdio(false) により、パフォーマンスが大幅に向上しました。 std::fstream アプローチ。この変更により、データの書き込みを妨げる不要な操作が排除されました。
オプションの比較
最近のベンチマークでは、std::fstream (ストリーム同期が無効になっている) と C スタイル ファイルの両方が処理により、SSD の書き込み速度を効果的に最大化できます。ただし、std::fstream はよりシンプルで最新の API を提供し、C スタイルのファイル処理は特定のシナリオでわずかに優れたパフォーマンスを提供します。
結論
大規模な書き込みの場合バッファをバイナリ ファイルに保存する場合は、次の戦略をお勧めします:
以上がC で大きなバッファをバイナリ ファイルに効率的に書き込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。