Maison > développement back-end > C++ > Comment puis-je optimiser l'écriture de tampons volumineux dans des fichiers binaires en C ?

Comment puis-je optimiser l'écriture de tampons volumineux dans des fichiers binaires en C ?

Patricia Arquette
Libérer: 2024-12-21 08:18:17
original
291 Les gens l'ont consulté

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

É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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal