pulpul74
Messages postés77Date d'inscriptionjeudi 11 octobre 2007StatutMembreDernière intervention27 septembre 2010
-
6 juin 2008 à 11:38
bonjourcheval
Messages postés228Date d'inscriptionmercredi 13 décembre 2000StatutMembreDernière intervention 8 août 2011
-
13 juin 2008 à 18:19
Bonjour,
J'ai actuellement installé une applic en VB6 chez un client. Cette applic à l'heure actuelle dois récupérer les données d'un fichier texte, ensuite je fais différents tri pour en extraire les données qui m'interresse, j'ai pas mal de boucle d'attente et de tri. Mes boucle ne dépassent jamais 100, et je fais mes cycle tout les 500ms.
En fait mon problème c'est que quand je lance cette applic, tou va bien, mais plus on avance dans le temps, plus elle utilise de la ressource windows. j'étais rendu à 50% du processeur utilisé, 40M de mémoire prise.... J'aimerai savoir s'il y a une solution pour utilisé moins de ressource, ou au moins les rendres, ou bien optimiser le code....Si vous avez une solution, merci d'avance
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 6 juin 2008 à 11:57
Bonjour
Il faut voir ton appli dans son ensemble.
Mais pour être sûr de libérer un objet, il faut lui assigner Nothing.
Ensuite je ne puis rien te dire de plus, c'est vraissemblablement ton code qui doit se charger progressivement.
Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
pulpul74
Messages postés77Date d'inscriptionjeudi 11 octobre 2007StatutMembreDernière intervention27 septembre 2010 6 juin 2008 à 14:24
Pour les lecture ou ecriture d'un fichier texte, j'utilise Open. y'a pas moyen de gagner la dessus?
Sinon je suis en option explicit, cela facilite t'il les choses.
Et est ce que l'utilisation de boucle (For-Next) peut utiliser autant de mémoire ( à noter que j'ai des boucles dans des boucles), parce que a part ca et des traitement de chaine (genre mid), c'est presque tout ce que j'ai...
J'ai aussi beaucoup fractionné en multiple 'public function' dans des modules différents. Cela est il une bonne solution?
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 6 juin 2008 à 14:49
Bonjour
Option Explicit est indispensable en VB6.
Il est possible éventuellement, que tu interrompe une procédure (contenant un DoEvents) et que cela se fasse en cascade, alors là il y a un risque, mais sinon, d'après ce que tu as écris, je ne vois rien de grave (même parfois c'est Très bien).
Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
pulpul74
Messages postés77Date d'inscriptionjeudi 11 octobre 2007StatutMembreDernière intervention27 septembre 2010 6 juin 2008 à 14:55
J'avais ajouté quelques DoEvents dans certaines boucle pensant que cela pourrai faciliter les choses.
Faut il que je les enlève? Je n'en ai pas forcement besoin dans des boucle For-Next.
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 6 juin 2008 à 15:12
Bonjour
Tu peux essayer avec et sans pour voir la différence, mais à toi de voir si cela te convient.
C'est assez difficile de dire la cause, sans avoir la source, mais je suppose que c'est pro (tu fais référence à un client), donc je ne serais pas exigeant. Mais je ne puis t'en dire plus sans avoir plus d'info, mais je ne vois pas vraiment lesquels (d'infos) seraient déterminantes. Dsl.
Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
pulpul74
Messages postés77Date d'inscriptionjeudi 11 octobre 2007StatutMembreDernière intervention27 septembre 2010 6 juin 2008 à 15:33
Merci pour ton aide, je vais essayer de voir pour les DoEvents, sinon je vois pas comment je pourrais simplifier plus mon programme, parce que je ne vois plus que cette solution, la profusion de boucle le fais ralentir à force. Pourtant j'essaye au mieux de raccourcir ces boucles....
Mais merci quand même pour ton aide, je vais éssayé maintenant de trouvé une solution, sinon ce sera le redémarrage du programme à intervalles régulier...
Bonne continuation
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 6 juin 2008 à 23:52
Bonsoir,
Comme déjà dit, DoEvents permet "de redonner la main" aux autres programmes externes en cours. En principe, cela est utile pour éviter de tout figer durant l'exécution de ton programme. Le "mieux" étant d'éviter de les mettre dans une boucle, mais peut-être difficile dans ton cas.
Ensuite, si la quantité de mémoire utilisée augmente, cela ne doit pas être les boucles (ou directement les boucles)... Y a-t-il une mise en mémoire d'un tableau indicé ? (Redim Tab(t) as ...)
Le temps d'attente, quant à lui, est probablement le résultat des boucles qui ont l'air d'augmenter... Est-ce que les bornes sont modifiées au fur et à mesure ?
ex :
for b1=1 to 10000
for b2=1 to b1 ... etc
cette structure devient vite pénalisante...
Autre chose de bien, comme déjà dit, c'est l'emploi de Option Explicit, mais reste à donner un type de variable adapté... Pour les boucles dans la mesure où cela ne pose pas de problème, choisir des type LONG.
ex :
Dim b1 as Long, b2 as Long ... etc
Il reste que sans code, comme le dit NHenry, difficile d'en dire plus...