Utilisation abusive ressource windows

Signaler
Messages postés
77
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
27 septembre 2010
-
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011
-
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

8 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
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
Messages postés
77
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
27 septembre 2010

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?
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
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
Messages postés
77
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
27 septembre 2010

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.
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
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
Messages postés
77
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
27 septembre 2010

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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...

Amicalement,
Us.
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

De plus, pour toutes tes traitements de chaines :

si tu concatènes des 3 chaînes,

strA = StrA & strB & strC

Utilise plutôt

strA = StrA & (strB & strC)

C'est plus rapide, car il recopie la chaine A selement 1 fois à la place de 2

Aussi, utilise les fonctions de chaînes tel mid$, left$,etc tu vas sauver un peu de temps

Il y a un guide là dessus sur internet.
http://www.aivosto.com/vbtips/stringopt.html

Il m'a bien aider! J'espère qu'il t'aidera aussi =)