Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengoptimumkan Menulis Penampan Besar kepada Fail Binari dalam C?

Bagaimanakah Saya Boleh Mengoptimumkan Menulis Penampan Besar kepada Fail Binari dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-12-21 08:18:17292semak imbas

How Can I Optimize Writing Large Buffers to Binary Files in C  ?

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!

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