ホームページ > バックエンド開発 > C++ > C でのバイナリ ファイルへの大きなバッファの書き込みを最適化するにはどうすればよいですか?

C でのバイナリ ファイルへの大きなバッファの書き込みを最適化するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-21 08:18:17
オリジナル
291 人が閲覧しました

How Can I Optimize Writing Large Buffers to Binary Files in C  ?

C でのバイナリ ファイルへの大きなバッファの最適な書き込み

大量のデータをバイナリ ファイルに効率的に書き込むために重要な考慮事項は、パフォーマンスのボトルネック。 C で std::fstream を使用する従来のアプローチは、基盤となるファイル処理メカニズムによる制限に遭遇することがよくあります。

FILE による直接ファイル I/O を利用するソリューション

優れた方法これには、FILE オブジェクトを介した直接ファイル I/O の使用が含まれます。この直接的なアプローチにより、std::fstream オブジェクトに関連する特定のオーバーヘッドがバイパスされ、書き込み速度が大幅に向上します。 fwrite を直接利用することで、書き込み操作をより効率的に実行し、処理オーバーヘッドを削減できます。

FILE を使用したコードの最適化

提供されたコードは、この最適化を示しています。

#include <stdio.h>
#include <chrono>
#include <vector>

std::vector<uint64_t> GenerateData(std::size_t bytes) {
   // Code for data generation omitted for brevity
}

long long option_2(std::size_t bytes) {
   std::vector<uint64_t> data = GenerateData(bytes);

   auto startTime = std::chrono::high_resolution_clock::now();
   FILE* file = fopen("file.binary", "wb");
   fwrite(&data[0], 1, bytes, file);
   fclose(file);
   auto endTime = std::chrono::high_resolution_clock::now();

   return std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
}
ログイン後にコピー

この最適化されたアプローチは、FILE によって提供される直接ファイル I/O を利用して、特に大規模なファイルの場合、より高速な書き込み速度を実現します。

ベンチマークと比較

std::fstream と FILE I/O を使用した場合のパフォーマンスを比較すると、直接ファイル I/O が従来のアプローチより大幅に優れていることがわかります。たとえば、FILE I/O を使用して 4GB のデータを書き込むには約 130 ミリ秒かかりますが、std::fstream を使用すると平均約 240 ミリ秒かかります。これは、ダイレクト I/O によって効率が向上することを示しています。

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

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