printf() fait elle perdre du temps ??

printf() fait elle perdre du temps ?? - C - Programmation

Marsh Posté le 30-11-2006 à 16:09:04    

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  ;)

Reply

Marsh Posté le 30-11-2006 à 16:09:04   

Reply

Marsh Posté le 30-11-2006 à 16:24:17    

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 -
Reply

Marsh Posté le 30-11-2006 à 16:28:47    

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

Reply

Marsh Posté le 30-11-2006 à 16:30:16    

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

Reply

Marsh Posté le 30-11-2006 à 16:39:46    

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/
Reply

Marsh Posté le 30-11-2006 à 16:49:25    

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.

Reply

Marsh Posté le 30-11-2006 à 17:42:05    

+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

Reply

Marsh Posté le 01-12-2006 à 18:06:57    

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
Reply

Marsh Posté le 01-12-2006 à 19:03:16    

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

Reply

Marsh Posté le 01-12-2006 à 19:17:12    

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

Reply

Marsh Posté le 01-12-2006 à 19:17:12   

Reply

Marsh Posté le 01-12-2006 à 19:22:25    

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/
Reply

Marsh Posté le 08-12-2006 à 15:39:42    

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
Reply

Marsh Posté le 08-12-2006 à 15:56:40    

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
Reply

Marsh Posté le 08-12-2006 à 16:12:18    

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
Reply

Marsh Posté le 08-12-2006 à 22:17:00    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed