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 サイトの他の関連記事を参照してください。