Menulis Penampan Besar ke Fail Binari Secara Optimum dalam C
Untuk menulis sejumlah besar data ke fail binari dengan cekap, pertimbangan utama adalah mengelakkan kesesakan prestasi. Pendekatan konvensional menggunakan std::fstream dalam C sering menghadapi batasan disebabkan oleh mekanisme pengendalian fail yang mendasari.
Penyelesaian Menggunakan I/O Fail Terus dengan FILE
Kaedah yang lebih baik melibatkan penggunaan fail langsung I/O melalui objek FILE. Pendekatan langsung ini memintas overhed tertentu yang dikaitkan dengan objek std::fstream, menghasilkan kelajuan tulis yang dipertingkatkan dengan ketara. Dengan menggunakan fwrite secara langsung, operasi tulis boleh berlaku dengan lebih cekap dan dengan overhed pemprosesan yang dikurangkan.
Pengoptimuman Kod dengan FAIL
Kod yang disediakan menunjukkan pengoptimuman ini:
#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(); }
Pendekatan yang dioptimumkan ini menggunakan I/O fail langsung yang disediakan oleh FILE untuk mencapai penulisan yang lebih pantas kelajuan, terutamanya untuk jumlah data yang besar.
Penanda Aras dan Perbandingan
Perbandingan prestasi antara menggunakan std::fstream dan FILE I/O mendedahkan fail langsung I/O dengan ketara mengatasi pendekatan konvensional. Sebagai contoh, menulis data 4GB menggunakan FILE I/O mengambil masa kira-kira 130 milisaat, manakala menggunakan std::fstream mengambil masa kira-kira 240 milisaat secara purata, menunjukkan peningkatan kecekapan yang disediakan oleh I/O langsung.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Menulis Penampan Besar kepada Fail Binari dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!