Maison > développement back-end > C++ > C `ifstream` est-il toujours plus lent que `fscanf` ?

C `ifstream` est-il toujours plus lent que `fscanf` ?

Susan Sarandon
Libérer: 2024-11-12 11:15:02
original
624 Les gens l'ont consulté

Is C   `ifstream` Always Slower Than `fscanf`?

Amélioration des performances d'IOStream

Divers utilisateurs de C qui ont appris le C préfèrent continuer à utiliser la famille de fonctions printf / scanf même pendant le codage en C, en raison de son interface accessible et capacités de localisation. Cependant, des problèmes de performances peuvent survenir lors de la comparaison avec ifstream de C. On observe notamment que fscanf surpasse systématiquement ifstream.

Techniques d'optimisation pour IOStreams

Pour améliorer les performances d'IOStreams, envisagez les techniques suivantes :

Mémoire tampon avec pubsetbuf()

L'augmentation de la taille du tampon réduit les accès au disque dur et les appels système, améliorant ainsi les performances. Définissez le tampon en accédant à l'implémentation streambuf à l'aide de pubsetbuf().

char Buffer[N];

std::ifstream file("file.txt");

file.rdbuf()->pubsetbuf(Buffer, N);
Copier après la connexion

Gestion des paramètres locaux

Les paramètres régionaux peuvent avoir un impact sur les performances en raison de la conversion de caractères et des appels système complexes. Choisissez les paramètres régionaux C par défaut, optimisés pour une conversion et une uniformité minimales entre les machines, pour éviter cette surcharge.

Synchronisation avec sync_with_stdio()

Ce paramètre n'a pas présenté d'améliorations notables des performances lors de nos tests. .

Benchmarks et résultats

Nos benchmarks utilisant un programme de test simple révèlent des résultats variables selon les différentes plates-formes et compilateurs. Le résultat suggère que les performances d'IOStreams dépendent de l'implémentation.

Voici les résultats de divers benchmarks :

g 4.7.2-2ubuntu1, -O3, Ubuntu 11.10 x86_64

  • C 25% plus rapide

g 4.4.5, -O3, Ubuntu Linux 10.10 x86_64

  • C 17 % plus rapide

g i686-apple-darwin10-g -4.2.1 (GCC) 4.2.1, mac mini, 4 Go de RAM

  • C 111 % plus lent

clang 3.8.0-2ubuntu4, Kubuntu 16.04 Linux 4.8-rc3

  • C 66 % plus rapide

Ces résultats soulignent l'importance de la qualité de la mise en œuvre dans l'optimisation des performances d'IOStreams.

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