Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Prestasi Penulisan Fail Optimum dalam C?

Bagaimana untuk Mencapai Prestasi Penulisan Fail Optimum dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 14:22:23654semak imbas

How to Achieve Optimal File Writing Performance in C  ?

Cara Meningkatkan Prestasi Penulisan Fail dalam C

Apabila menulis data yang banyak pada fail binari, pengoptimuman prestasi adalah penting. Begini cara untuk meningkatkan kelajuan penulisan anda:

Menggunakan FILE* untuk Pengendalian Fail Terus:

Dalam kod contoh, penggunaan FILE* membenarkan akses fail terus, memintas lapisan perantaraan dan mengurangkan overhed. Pendekatan ini menghasilkan peningkatan prestasi yang ketara, seperti yang diperhatikan dalam soalan asal.

Pengoptimuman Kod untuk Penggunaan FAIL*:

#include <stdio.h&gt ;<br>const unsigned saiz panjang panjang = 8ULL<em>1024ULL</em>1024ULL;<br>unsigned long long a[saiz];</p><p>int main()<br>{</p><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>

Kod yang dioptimumkan ini menggunakan FILE* terus untuk menulis ke fail binari, mencapai kelajuan menulis yang lebih pantas.

Perbandingan Pendekatan:

Pengukuran terkini menunjukkan bahawa std::fstream menawarkan prestasi yang setanding dengan FILE* untuk penulisan fail besar. Berikut ialah perbandingan pendekatan yang berbeza:

#include <fstream></p>
<h1>include <chrono></h1>
<h1>include <vector></h1>
<h1> termasuk <cstdint></h1>
<h1>serta <numeric></h1>
<h1>serta <rawak></h1>
<h1>serta <algoritma></h1>
<h1>serta <iostream></h1>
<h1>serta <cassert></h1>
<p>pilihan panjang panjang_1(std::size_t bait)<br>{</p>
<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();

}

pilihan panjang panjang_2(std::size_t bait)
{

// 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();

}

Pengukuran menunjukkan bahawa kedua-dua option_1 (std::fstream) dan option_2 (FILE*) mencapai prestasi yang setanding untuk fail besar menulis.

Kesimpulan:

Untuk menulis penimbal besar ke fail binari dalam C , kedua-dua FILE* dan std::fstream menawarkan prestasi tinggi. Pilihan antara kedua-duanya bergantung pada keperluan dan keutamaan tertentu.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Prestasi Penulisan Fail Optimum dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn