C でのバイナリ ファイルへの大きなバッファの書き込み : パフォーマンスの最適化
元の質問:
大量のデータ(80GB)をパソコンに書き込もうとした場合SSD では、std::fstream を使用して提供された C コードは約 20MB/秒の速度を達成しましたが、これは SSD の予想される転送速度よりも大幅に遅かったです。この質問では、書き込みプロセスを最適化する方法を求めています。
解決策:
オプション 1: std::fstream を sync_with_stdio(false) で使用する
このアプローチでは、std::fstream を使用します。 sync_with_stdio(false) フラグ。C と C の I/O ストリーム間の同期を無効にします。ストリームを分離することで、データのフォーマットとフラッシュのオーバーヘッドが軽減され、一部のシステムのパフォーマンスが向上します。
オプション 2: C 標準 I/O 関数の活用
これこのオプションは、バイナリ ファイルにデータを書き込むために低レベルの C 標準 I/O 関数 (fopen、fwrite、および fclose) を使用します。 C I/O は std::fstream よりも低いレベルで動作するため、ファイル操作の制御が強化され、パフォーマンスが向上する可能性があります。
更新された測定値:
有効性を判断するには現在のシナリオにおける各アプローチの修正コードと測定が行われました。 2017:
コード:
更新されたコードでは、データ生成、高解像度クロックとの同期、柔軟なバッファ サイズ操作など、より高度な技術が採用されています。
結果:
測定値オプション 1 (sync_with_stdio(false) で std::fstream を使用) とオプション 3 (C 標準 I/O 関数を使用) の両方が SSD の書き込み機能を最大限に活用し、同様の書き込み速度を達成していることが明らかになりました。
結論:
C で大きなバッファをバイナリ ファイルに書き込むための最良のアプローチは、特定のハードウェアとソフトウェア構成。一般に、 std::fstream と sync_with_stdio(false) および C 標準 I/O 関数を使用すると、効率的なパフォーマンスが得られます。これらの技術によりボトルネックが解消され、SSD への最適化された高速データ転送が可能になります。
以上がSSD のパフォーマンスを最大化するために C バイナリ ファイルの書き込みを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。