Rumah >pembangunan bahagian belakang >C++ >Bagaimana Saya Boleh Memaksimumkan Kelajuan Tulis Fail Binari dalam C?

Bagaimana Saya Boleh Memaksimumkan Kelajuan Tulis Fail Binari dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 00:31:12906semak imbas

How Can I Maximize Binary File Write Speed in C  ?

Tingkatkan Kelajuan Pemindahan Data dalam Fail Binari Menulis dalam C

Pengenalan:

Menulis penimbal besar kepada fail binari dengan cekap adalah selalunya penting untuk aplikasi sensitif prestasi. Dalam artikel ini, kami akan meneroka persoalan tentang cara mengoptimumkan proses ini dalam C .

Pendekatan Awal dan Masalah:

Kod yang disediakan nampaknya kurang berprestasi berbanding fail operasi salin. Kesesakan yang berpotensi termasuk:

  • Penggunaan fstream dan bukannya FILE* (I/O standard) untuk penulisan binari
  • Gelung tulis yang tidak cekap dengan panggilan sistem yang kerap

Penyelesaian Dioptimumkan:

Lebih pantas pendekatan ialah menggunakan FILE* dan fwrite:

#include <stdio.h>

const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];

int main()
{
    FILE* pFile;
    pFile = fopen("file.binary", "wb");
    for (unsigned long long j = 0; j < 1024; ++j)
    {
        // Data generation
        fwrite(a, 1, size*sizeof(unsigned long long), pFile);
    }
    fclose(pFile);
    return 0;
}

Kod ini mencapai kelajuan tulis kira-kira 220MB/s, menghampiri had SSD.

Pemurnian Lanjut:

Untuk meningkatkan lagi kecekapan kod, kami boleh melaksanakan berikut:

  • Lumpuhkan penyegerakan strim dengan std::ios_base::sync_with_stdio(false)
  • Penjanaan data divektorkan menggunakan std::vector dan std::iota, std::shuffle, dan std::random_device
  • Ukuran masa menggunakan std::chrono

Penandaarasan dan Keputusan:

Penandaarasan kod pada platform berbeza (Kom Riba dan Desktop) dengan saiz penimbal yang berbeza-beza (1MB-4GB) didedahkan :

  • Pada kedua-dua platform, fstream mengatasi FILE* apabila menggunakan penimbal kecil (1MB) tetapi ketinggalan untuk penimbal yang lebih besar.
  • fstream dapat menggunakan lebar jalur SSD sepenuhnya untuk penimbal besar, menghapuskan kelebihan prestasi FILE*.

Kesimpulan:

Ringkasnya, untuk cekap menulis penimbal besar ke fail binari dalam C , pertimbangkan:

  • Menggunakan std::fstream untuk penimbal kecil
  • Menggunakan FILE* dan fwrite untuk penimbal besar
  • Melumpuhkan penyegerakan std::ios stream
  • Mengoptimumkan penjanaan data dan penanda aras

Atas ialah kandungan terperinci Bagaimana Saya Boleh Memaksimumkan Kelajuan Tulis 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