ホームページ > バックエンド開発 > C++ > C で最適なファイル書き込みパフォーマンスを実現するにはどうすればよいですか?

C で最適なファイル書き込みパフォーマンスを実現するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-11 14:22:23
オリジナル
608 人が閲覧しました

How to Achieve Optimal File Writing Performance in C  ?

C でファイル書き込みパフォーマンスを向上させる方法

バイナリ ファイルに大量のデータを書き込む場合、パフォーマンスの最適化が非常に重要です。書き込み速度を向上させる方法は次のとおりです:

直接ファイル処理に FILE* を利用する:

サンプル コードでは、FILE* を使用することでファイルへの直接アクセスが可能になり、バイパスが可能になります。中間層とオーバーヘッドの削減。元の質問で確認されたように、このアプローチによりパフォーマンスが大幅に向上します。

FILE* 使用のためのコードの最適化:

#include <stdio.h&gt ;<br>const unsigned Long Long サイズ = 8ULL<em>1024ULL</em>1024ULL;<br>unsigned long long a[size];</p>
<p>int main()<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">FILE* pFile;
pFile = fopen("file.binary", "wb");
for (unsigned long long j = 0; j < 1024; ++j){
    // Some calculations to fill a[]
    fwrite(a, 1, size*sizeof(unsigned long long), pFile);
}
fclose(pFile);
return 0;
ログイン後にコピー

}
< /pre>

この最適化されたコードは、 FILE* を使用してバイナリ ファイルに直接書き込むと、書き込み速度が向上します。

アプローチの比較:

最近の測定では、std::fstream が FILE と同等のパフォーマンスを提供することが示されています。 * 大きなファイルの書き込み用。以下に、さまざまなアプローチの比較を示します。

#include <fstream></p>
<h1>include <chrono></h1>
<h1>include <vector></h1>
<h1>含める<cstdint></h1>
<h1>include <numeric></h1>
<h1>include <random></h1>
<h1>include <algorithm></h1>
<h1>include <iostream></h1>
<h1>include <cassert></h1>
<p>long long option_1(std::size_t バイト)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// Using std::fstream
std::vector<uint64_t> data = GenerateData(bytes);
auto startTime = std::chrono::high_resolution_clock::now();
auto myfile = std::fstream("file.binary", std::ios::out | std::ios::binary);
myfile.write((char*)&amp;data[0], bytes);
myfile.close();
auto endTime = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
ログイン後にコピー

}

long long オプション_2(std::size_t bytes)
{

// Using FILE*
std::vector<uint64_t> data = GenerateData(bytes);
auto startTime = std::chrono::high_resolution_clock::now();
FILE* file = fopen("file.binary", "wb");
fwrite(&amp;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();
ログイン後にコピー

}

測定結果は、option_1 (std::fstream) と option_2 (FILE*) の両方が同等のパフォーマンスを達成していることを示しています大きなファイルの場合

結論:

C でバイナリ ファイルに大きなバッファを書き込む場合、 FILE* と std::fstream の両方が高いパフォーマンスを提供します。この 2 つのどちらを選択するかは、特定の要件と好みによって異なります。

以上がC で最適なファイル書き込みパフォーマンスを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:C で基本クラスのコンストラクターを呼び出すにはどうすればよいですか? 次の記事:変数に「const」と「constexpr」を使用する必要があるのはどのような場合ですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート