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
Lepaskan: 2024-12-11 14:22:23
asal
572 orang telah melayarinya

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><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;
Salin selepas log masuk

}
< /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>
<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();
Salin selepas log masuk

}

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();
Salin selepas log masuk

}

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!

sumber:php.cn
Artikel sebelumnya:Bagaimana Saya Memanggil Pembina Kelas Asas dalam C? Artikel seterusnya:Bilakah Saya Perlu Menggunakan `const` lwn. `constexpr` untuk Pembolehubah?
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan