ホームページ >バックエンド開発 >C++ >C で大きなバッファをバイナリ ファイルに効率的に書き込むにはどうすればよいですか?

C で大きなバッファをバイナリ ファイルに効率的に書き込むにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-09 06:48:07865ブラウズ

How Can I Efficiently Write Large Buffers to Binary Files in C  ?

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 スタイルのファイル処理は特定のシナリオでわずかに優れたパフォーマンスを提供します。

結論

大規模な書き込みの場合バッファをバイナリ ファイルに保存する場合は、次の戦略をお勧めします:

  • を使用するストリーム同期が無効になっている std::fstream。
  • パフォーマンスが向上する可能性があるため、C スタイルのファイル処理の使用を検討してください。
  • 両方の方法を試してみると、特定の要件に対する最適なソリューションが決定されます。

以上がC で大きなバッファをバイナリ ファイルに効率的に書き込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。