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> ;<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;
}
< /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*)&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(&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!