Votre question

problème de vitesse d'exécution d'un programme

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
17 Octobre 2005 23:00:50

salut tout le monde

J'ai développé un petit programme (1) en ligne de commande avec visual c++ et j'ai voulu faire une interface pour rentrer plus facilement les paramètres, j'ai utilisé borland c++ builder pour faire le meme programme avec l'interface (2)

dans (2), je ne fais pas appel à l'exécutable (1), j'ai réécrit les mêmes fonctions dans (2)

le pb c'est que (2) met 3 minutes à effectuer l'algo alors que (1) ne met que 12 secondes !

je ne comprends pas pourquoi il y a une telle différence entre les deux !
quelqu'un a-t-il une idée ?
y a-t-il une solution en restant entièrement sous borland ?
faut-il que je fasse appel à (1) avec (2) ? à ce moment là comment faire pour passer les paramètres d'un programme à l'autre ?

svp aidez moi, c'est assez urgent !

Autres pages sur : probleme vitesse execution programme

17 Octobre 2005 23:10:15

j'ai paumé ma boule de crystale désolé
17 Octobre 2005 23:13:07

ça doit venir du compilateur en lui-meme si tu a ecrit exactement les memes fonctions, pourtant borland est censé etre un des meilleurs compilo.

sinon, pour ton programme ça doit etre un algo de malade parceque meme 12 secondes pour du C++ c'est assez énorme.
Contenus similaires
17 Octobre 2005 23:13:38

salut,
il n'y a pas de raison que tu ais des différence de perf de cette ordre entre VC++ et borland.

Penche toi plutôt sur ce que tu fais de différent dans Borland par rapport à VC.

Comment compares tu tes perfs? Il faut que tu mettes un timer en début d'algo et en fin d'algo en ne prenant pas en compte tout ce qui pourrait être gestion d'interface sous borland (mais de la à avoir 3 minutes d'écarts ...).
17 Octobre 2005 23:17:16

c'est vrai que l'initialisation et la gestion de l'interface est forcément plus lente.
17 Octobre 2005 23:28:33

en gros le programme sert à faire de l'extraction et du reformatage de données
je lis les données brutes binaires dans le fichier source et je les réécris dans le fichier destination après reformatage

la seule partie qui est différente c'est la partie d'initialisation qui permet de récupérer les données

ensuite je rentre dans une boucle qui s'arrete quand j'arrive à la fin du fichier

le test que j'ai fait c'est sur un fichier de 33 Mo: avec le prog en ligne de commande il me faut 12 s pour le traiter et avec le prog fait sous c++ builder il me faut 3 minutes !
18 Octobre 2005 09:25:58

ça n'en dit pas beaucoup plus sur les causes de ton problème.
Je suis sûr que la différence entre VC et Borland à qualité de programmation égale ne permet pas de passer de 12 secondes à 3 minutes.
- Vérifie dans le gestionnaire de tâche la consommation de ton programme en Borland et en VC++.
- Peut-être à tu une énorme fuite mémoire qui l'oblige à faire du swapping.
Tu dis que tu parses un fichier pour le reformatter:
- Dans quoi stockes tu ce que tu lis?
- Es tu sûr de le désallouer correctement?
- Es tu sûr d'utiliser les structures/classes les plus performantes sous borland?
- Essaye avec un fichier plus gros, plus petit et regarde si le temps est proportionnel à la taille du fichier.

Tiens nous au courant.
a b L Programmation
18 Octobre 2005 13:06:58

As-tu mis les options d'optimisation sur les 2 cas.
Il faut faire aussi attention aux valeurs initiales de variables qui sont initialisé de façon différente selon les compilateurs (cl ne met aucune variable 0, borland je sais pas).
N'utilises-tu que des fonctions ANSI ? as-tu débuggué pour voir si ça faisait la même chose ?
18 Octobre 2005 13:21:23

tu es sur que tu as bien reecris les fonctions ? Tu n'as pas mis d'appel graphique dans la boucle etc ?

Ca pourrais aider d'avoir le code, va le poster sur http://rafb.net/paste
18 Octobre 2005 15:47:56

ok merci tout le monde
j'ai effectué une chiée de test et j'ai fini par trouver plusieurs choses qui plombaient la vitesse sous borland:
-je faisais appel ou je modifiais des éléments graphiques dans des fonctions qui n'avaient pas étaient déclarées en __fastcall Form1::Nomdela fonction
-je fais appel à des fonctions graphiques dans la boucle, en gros dans l'interface j'ai placé une barre de progression et j'ai ajouté le code
  1. ProgressBar1->Position=nb_ech_proc*100/NbSamplesToProcessInSegment;
  2. ProgressBar1->Hint=("%d",ProgressBar1->Position);


pour la barre de progression, c'est le "Hint" qui bouffait le plus, mais même la "Position" bouffe pas mal.

à ce propos vous auriez une idée pour avoir une barre de progression moins gourmande ?

encore merci tout le monde
18 Octobre 2005 15:54:38

Ne connaissant pas borland, je ne peux pas t'aider sur les objets à utiliser.
Sur la structure du programme, moi je placerais la progression dans un thread ... tu ne pénaliseras ainsi pas le traitement.
18 Octobre 2005 17:05:16

ok c'est bon j'ai trouvé une solution

ancien code
  1. ProgressBar1->Position=nb_ech_proc*100/NbSamplesToProcessInSegment;
  2. ProgressBar1->Hint=("%d",ProgressBar1->Position);


nouveau code
  1. if (fmod(100*nb_ech_proc,NbSamplesToProcessInSegment)==0)
  2. {
  3. ProgressBar1->Position=nb_ech_proc*100/NbSamplesToProcessInSegment;
  4. ProgressBar1->Hint=("%d",ProgressBar1->Position);
  5. }


ça permet d'éviter de faire des accès inutiles aux paramètres de la ProgressBar

merci beaucoup tout le monde
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS