Écrire de manière optimale des tampons volumineux dans des fichiers binaires en C
Pour écrire efficacement de grandes quantités de données dans un fichier binaire, une considération clé est d'éviter goulots d’étranglement en matière de performances. Les approches conventionnelles utilisant std::fstream en C rencontrent souvent des limitations dues aux mécanismes de gestion de fichiers sous-jacents.
Solution utilisant les E/S directes de fichier avec FILE
Une méthode supérieure implique l'utilisation d'E/S de fichier directes via l'objet FILE. Cette approche directe contourne certaines surcharges associées à l'objet std::fstream, ce qui entraîne des vitesses d'écriture considérablement améliorées. En utilisant fwrite directement, les opérations d'écriture peuvent se produire plus efficacement et avec une surcharge de traitement réduite.
Optimisation du code avec FILE
Le code fourni démontre cette optimisation :
#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(); }
Cette approche optimisée utilise les E/S de fichier directes fournies par FILE pour atteindre des vitesses d'écriture plus rapides, en particulier pour les données volumineuses. montants.
Analyse comparative et comparaison
Les comparaisons de performances entre l'utilisation de std::fstream et les E/S FILE révèlent que les E/S directes sur fichiers surpassent considérablement l'approche conventionnelle. Par exemple, l'écriture de 4 Go de données à l'aide de FILE I/O prend environ 130 millisecondes, tandis que l'utilisation de std::fstream prend environ 240 millisecondes en moyenne, démontrant les gains d'efficacité apportés par les E/S directes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!