begin process at 2010 02 10 04:11:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

Des boucles de plus en plus lentes... Que faire?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Des boucles de plus en plus lentes... Que faire?

dimanche 9 septembre 2007 à 18:58:23 | Des boucles de plus en plus lentes... Que faire?

Pingouin57

Salut à tous,

Voici mon petit problème. Je développe actuellement un petit logiciel en delphi dans lequel j'inclus une boucle se répétant beaucoup de fois (l'execution peut durer quelques minutes), j'utilise la commande Refesh() et Redraw() dans la boucle pour actualiser l'affichage de la fenêtre (j'en ai d'ailleurs profité pour y mettre une progressbar qui indique l'avancement du bordel).
Aucun soucis jusque là, cependant, lorsque notre petit while commence à tourner, on peut constater que l'execution est de plus en plus lente (les calculs effectués dans chaque boucle sont généralement les mêmes à quelques choses près), de plus, si le refresh fonctionne au début, au bout de quelques secondes si on a le malheur de cliquer quelque part dans le programme celui-ci ne répond plus et continue à tourner. Il faut attendre la fin de la boucle pour que le programme réponde à nouveau. Grrr...

Je ne sais pas si il existe des techniques permettant d'éviter ce genre d'ennuis, que j'ai déja rencontré plusieurs fois auparavent sans parvenir à trouver de solution...

Merci à tous, Julien

dimanche 9 septembre 2007 à 19:22:52 | Re : Des boucles de plus en plus lentes... Que faire?

cantador

Membre Club
fuites mémoires..
Et j'ai mis des 's', on ne sait jamais..
Et puis mettre un refresh dans une boucle c'est osé..

cantador
dimanche 9 septembre 2007 à 19:24:55 | Re : Des boucles de plus en plus lentes... Que faire?

florenth

Membre Club
Réponse acceptée !
Salut !

Il y a un seul remède: le thread.
Mais ça rentre dans un autre domaine de prog', assez compliquà à mettre en oeuvre et à comprendre pour la première fois.

En tapant "thread" dnas le moteur de recherche, tu devrais trouver quelques pistes.
Et si tu as d'autres problèmes, n'hésites pas.

++
Flo

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
dimanche 9 septembre 2007 à 20:23:18 | Re : Des boucles de plus en plus lentes... Que faire?

f0xi

Membre Club Administrateur CodeS-SourceS


Sans code on peut pas t'aider.

d'ailleur je comprend pas que Flo t'oriente vers les threads ... comme ça ... sans voir de code.


tu dis que tu appel Refresh etc ... mais les refresh/redraw se mettent en file d'attente et plus tu en appel plus la queue se remplis!

faut appeler application.processmessages toutes les 5 boucles par exemple :

while ... do
begin
   code ...
   compteur := compteur + 1;
  if (compteur mod 5) = 0 then
    Application.ProcessMessage;
end;
dimanche 9 septembre 2007 à 20:50:27 | Re : Des boucles de plus en plus lentes... Que faire?

Pingouin57

Merci à vous pour ces infos, je vais tester l'utilisation de processmessages je vous tiens au courant
lundi 10 septembre 2007 à 18:35:11 | Re : Des boucles de plus en plus lentes... Que faire?

florenth

Membre Club
Réponse acceptée !
Eh eh  f0xi: le remplaçant des "grandes" boucles qui prennent trop de temps, c'est bien sur les threads !!!

ProcessMessages, ça va deux minutes. Mais c'est 15 fois moins souple et ça bouffe les ressources processeur pour rien (donc ça ralentit). Et puis, c'est plus compliqué qu'un thread bien mené.
Et en plus, ça résout pas 100% des problèmes qu'on pourrait avoir.

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
lundi 10 septembre 2007 à 19:12:08 | Re : Des boucles de plus en plus lentes... Que faire?

Pingouin57

Exact, j'ai en effet opté pour la solution du thread, cela parait être la meilleure solution dans ce genre de cas ^^


Cette discussion est classée dans : boucle, execution, tourner, boucles, lentes


Répondre à ce message

Sujets en rapport avec ce message

Boucles entrainant la non réponse d'un programme [ par laurentl2000 ] Bonjour, Lorsqu'on exécute une boucle for, while ou repeat, toute les feuilles de l'application concernée sont "bloquées" et ne répondent pas pendant comment faire pour metre des shape en boucle et ke leur valeur s'incrémente avec le compteur ? merci ;)a+ [ par Manouai ] Aime ton prochain comme toi même ! :D :) 8D[Code]procedure TForm1.Timer2Timer(Sender: TObject);vari,j:integer;beginfor i:=1 to n dofor j:=1 to n dobeg Problème d'execution [ par StoneInFocus ] Salut, voilà je debutes sous Delphi 6 et j'ai créer un prog qui est en fait une succession de form au debut cela marchait trés bien mais dès que j'ai creation de composant a l'execution [ par canabice01 ] salut tout le monde voilàj'ai arriver a créer un seul composant : private { Déclarations privées } MonButton:TButton; implementation procedure label dynamique [ par insiarantanplan ] bonjour, je souhaite afficher la progression d'une boucle dans un TLabel, et dans une TProgressBar, or durant la boucle, il je ne vois augmenter que l probelme de boucle [ par thone08 ] bonjour quel est le probleme ? car quand je compile il me fait que pour la premiere lettre et la derniere ?meric d'avanceprocedure TForm1.Button2Click Thread sans form [ par PatSW ] J'aimerais savoir comment faire une appli qui executre une boucle en tread et ui ne se ferme pas.ex:program Project1;uses Classes,Windows;var P: TPoi TQuery et thread [ par Fandril ] J'ai essaye de mettre l'execution de requete SQL dans un threadn il est indispensable que l'execution des requetes ne ralentisse pas le programmme pri peut-on sauter une itération dans une boucle [ par olator ] Est il possible en delphi dans sauter une itération dans une boucle for dans certain condition.exempleFor i:= 1 to 7 do(si variable x>6 passe a l'itér


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales