Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1464 connectés 

  FORUM HardWare.fr
  Programmation
  C

  printf() fait elle perdre du temps ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

printf() fait elle perdre du temps ??

n°1484417
in_your_ph​ion
Posté le 30-11-2006 à 16:09:04  profilanswer
 

Bonjour,
 
j'ai un programme où dans une boucle j'affichage le pourcentage écoulé. J'aimerais savoir si ca fait "perdre" du temps au calcul, en d'autres termes est ce que ça irait (significativement) plus vite sans affichage.
 
merci  ;)

mood
Publicité
Posté le 30-11-2006 à 16:09:04  profilanswer
 

n°1484428
skeye
Posté le 30-11-2006 à 16:24:17  profilanswer
 

Rien n'est gratuit, mais après pour savoir si c'est significatif le seul moyen c'est de tester.:o


---------------
Can't buy what I want because it's free -
n°1484429
Taz
bisounours-codeur
Posté le 30-11-2006 à 16:28:47  profilanswer
 

ça dépend de la fréquence de rafraichissement. Si tu raffraichis 1 million de fois en 1s, alors oui ça a un impact.

n°1484430
Bad_Day
Posté le 30-11-2006 à 16:30:16  profilanswer
 

C'est évidant que sans affichage, ça irait plus vite.
 

n°1484435
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-11-2006 à 16:39:46  profilanswer
 

in_your_phion a écrit :

j'ai un programme où dans une boucle j'affichage le pourcentage écoulé. J'aimerais savoir si ca fait "perdre" du temps au calcul, en d'autres termes est ce que ça irait (significativement) plus vite sans affichage.


Bien sûr que l'affichage a un cout. L'astuce algorithmique de base, c'est de ne changer l'affichage que si la donnée a changé...
 
EDIT : ajouté compteur de printf()...

Code :
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.    enum
  5.    { MIN = 23, MAX = 586426 };
  6.    {
  7.       long count = 0;
  8.       long i;
  9.       for (i = MIN; i < MAX; i++)
  10.       {
  11.          printf ("\r%3ld %%", (i * 100) / MAX), count++;
  12.          fflush (stdout);
  13.       }
  14.       printf ("\ndone (%ld printf())\n", count);
  15.    }
  16.    {
  17.       long count = 0;
  18.       long i;
  19.       int old = -1;
  20.       for (i = MIN; i < MAX; i++)
  21.       {
  22.          int const pcent = (i * 100) / MAX;
  23.          if (old != pcent)
  24.          {
  25.             old = pcent;
  26.             printf ("\r%3d %%", pcent), count++;
  27.             fflush (stdout);
  28.          }
  29.       }
  30.       printf ("\ndone (%ld printf())\n", count);
  31.    }
  32.    return 0;
  33. }



 99 %
done (586403 printf())
 99 %
done (100 printf())
 
Press ENTER to continue.


Message édité par Emmanuel Delahaye le 01-12-2006 à 19:29:00

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1484442
matafan
Posté le 30-11-2006 à 16:49:25  profilanswer
 

Le temps que fait perdre printf dépend surtout des capacités du device qui affiche les données, pas de printf lui-même. Quand tu profiles un programme qui ne fait que des printf en boucle, tu te rends compte qu'en fait le programme passe 99% du temps à dormir en attente d'io.

n°1484515
jesus_chri​st
votre nouveau dieu
Posté le 30-11-2006 à 17:42:05  profilanswer
 

+1 c'est surtout les IO qui sont longs
sprintf est très rapide par rapport à printf, à afficahge égal.
De plus l'affichage en mode texte est + long que celui en mode graphique (avec des SetText(HWND..))
Ca parait étrange mais l'affichage graphique est très optimisé au contraire de l'affichage texte, même dans une console fenétrée.
 
Je dis ça pour windows, sous linux c'est peut-être plus rapide

n°1485171
in_your_ph​ion
Posté le 01-12-2006 à 18:06:57  profilanswer
 

merci pour vos réponses :) en effet, dans ma fonction printf() ralenti le temps de calcul car il affiche les pourcentages tout les 1%, sur ce je vais le changer en 5% ...

Message cité 1 fois
Message édité par in_your_phion le 01-12-2006 à 18:07:19
n°1485198
Taz
bisounours-codeur
Posté le 01-12-2006 à 19:03:16  profilanswer
 

...
 
t'as rien compris ...
 
si tu progresses de 1% par seconde, printf ne ralentit en rien ton calcul

n°1485202
Giz
Posté le 01-12-2006 à 19:17:12  profilanswer
 

Truc con : tu fais une boucle avec (tu affiches la valeur de l'indice) et sans printf .... celle sans est bien plus rapide ;)

mood
Publicité
Posté le 01-12-2006 à 19:17:12  profilanswer
 

n°1485204
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-12-2006 à 19:22:25  profilanswer
 

in_your_phion a écrit :

merci pour vos réponses :) en effet, dans ma fonction printf() ralenti le temps de calcul car il affiche les pourcentages tout les 1%, sur ce je vais le changer en 5% ...


Ben non. J'ai même fourni un code qui explique le phénomène. C'est pas 100 printf() qui vont te ralentir...

 

Message cité 1 fois
Message édité par Emmanuel Delahaye le 01-12-2006 à 19:22:46

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1488672
in_your_ph​ion
Posté le 08-12-2006 à 15:39:42  profilanswer
 

Emmanuel Delahaye a écrit :

Ben non. J'ai même fourni un code qui explique le phénomène. C'est pas 100 printf() qui vont te ralentir...

 

printf ralenti si la fréquence de raffraichissement du terminal est plus faible que celle des printf...c'est ca ??

Message cité 1 fois
Message édité par in_your_phion le 08-12-2006 à 15:39:56
n°1488691
Elmoricq
Modérateur
Posté le 08-12-2006 à 15:56:40  profilanswer
 

in_your_phion a écrit :

printf ralenti si la fréquence de raffraichissement du terminal est plus faible que celle des printf...c'est ca ??


Voila.
Si tu veux voir l'effet que ça fait, il te suffit d'utiliser l'un des nouveaux guichets électroniques de la SNCF (les bornes jaunes et violettes, pas les bornes transilien). Lors de la saisie du code de la carte bancaire, on peut voir que l'affichage est tellement rafraîchi que rentrer ledit code est un calvaire. C'est éducatif pour nous, développeurs.

Message cité 1 fois
Message édité par Elmoricq le 08-12-2006 à 15:58:04
n°1488701
in_your_ph​ion
Posté le 08-12-2006 à 16:12:18  profilanswer
 

Elmoricq a écrit :

Voila.  
Si tu veux voir l'effet que ça fait, il te suffit d'utiliser l'un des nouveaux guichets électroniques de la SNCF (les bornes jaunes et violettes, pas les bornes transilien). Lors de la saisie du code de la carte bancaire, on peut voir que l'affichage est tellement rafraîchi que rentrer ledit code est un calvaire. C'est éducatif pour nous, développeurs.


 
ok, merci  :wahoo: ' sont fortiches à la Sncf, mais en même temps ils le valent bien  :lol:  
 
(donc j'avais bien compris soit-dit en passant ...  :whistle: )


Message édité par in_your_phion le 08-12-2006 à 16:12:46
n°1488904
el muchach​o
Comfortably Numb
Posté le 08-12-2006 à 22:17:00  profilanswer
 

Au pire, tu peux écrire dans un fichier. C'est largement plus rapide qu'à l'écran.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  printf() fait elle perdre du temps ??

 

Sujets relatifs
Emploi du tempsObtenir le temps restant
fonction qui s'autoexecute a chaque periode de temps definiTemps d'execution d'un programme
[C] comment simuler l'écoulement du temps ?temps d'execution qui augmente
Sessions qui ne durent pas dans le tempsEn combien de temps ?
temps de reponse 
Plus de sujets relatifs à : printf() fait elle perdre du temps ??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR