Kepone
Messages postés25Date d'inscriptionvendredi 2 août 2002StatutMembreDernière intervention 3 juillet 2008
-
15 janv. 2005 à 17:24
metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 2011
-
17 janv. 2005 à 17:38
Salut, j'ai déja poster un sujet la dessus mais je ne m'en suis pas sortit à l'époque.
J'ai une appli MDI avec de nombreuses fenetres contenant des listView qui me permettent
d'afficher le contenu de table Access.
L'appli (Asser importante) marche tres bien et me permet d'effectuer le suivi du parc informatique client à la perfection (garantie matériels, contrat de maintenance, appel téléphoniques, intervention, Interface avec mon logiciel de gestion commerciale pour récupérer les clients et les articles déja saisie, etc ....)
Seulement l'appli est lente . Encore juste après le lancement, ca va sa tourne, mais alors après cinq minutes c'est plus la peine sa n'avance plus. Du coup, j'ai fait des vérifs sur mon prog :
fermeture des recordsets après avoir terminé de les utiliser : OK
déchargement de mes objets par : Set "Objet" = Nothing : OK
et sa continue à ne pas avancer. Si quelqu'un connait un utilitaire qui permette de diagnostiquer le problème ou même avait une idée sur la question sa m'arrangerait . Je peux même vous mettre la source à dispo et les bases de données nécessaires y'a pas de problèmes.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 15 janv. 2005 à 20:04
Salut Kepone
En général, les applis qui se mettent à ramer après un certain temps sont dûes à l'utilisation de tableau en mémoire dont la taille augmente.
Mémorises-tu beaucoup d'infos en mémoire ?
Si oui, essaye de voir si tu ne peux pas mettre ces données dans une DB
Si non, tout dépend du genre d'objets que tu utilises ...
Par exemple, utilises-tu des Load d'objets ?
Si oui, est-ce que tu les UnLoad correctement ?
Quand tu as besoin d'en ajouter de nouveaux, cherches-tu des 'trous' dans la liste de ces objets ...
Revois éventuellement aussi l'étendue des variables : Quand une variable est déclarée en Public, est-ce vraiment utile ?
Il faudrait voir le code pour aller plus en avant ...
Vala
Jack
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 15 janv. 2005 à 20:10
Dernière minute :
Il faut savoir aussi que les bases Access ont le facheux inconvénient de grossir (*) avec le temps car mal gérée (en version 97 en tout cas, je ne connais pas les suivantes).
(*) si tu fais beaucoup d'insertions / suppressions
La solution que personnellement j'ai adopté est de créer une DB vide régulièrement, de rapatrier les données et de supprimer l'ancienne DB.
J'ai des applis qui tournent pendant des mois et qui utilisent cette 'astuce' pour éviter la saturation et longs les temps de réponse de la DB.
Une chose que tu pourrais faire, c'est de chronométrer (avec GetTickCount) le temps d'accès à ta DB (temps d'exécution d'une requète) lors d'une consultation standard et voir si c'est ce temps là qui augmente ou si c'est la mémoire qui gonfle et qui ralenti l'appli elle même.
Vala
Jack
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 20111 17 janv. 2005 à 05:48
J'ai une appli qui tourne presque 24/24h avec au bout une base access 2002 en mode dao et ca tourne tres bien (la base est petite en taille (2 mo) mais contient plus de 5400 enregistrements) . J'ai pas le probleme de lenteur mais tout dépend bien sur de l'appli.
Essaye de déboguer ton appli pour voir ou elle passe le plus temps, peut etre une boucle d'attente qui meriterais un doevents.
Regarde aussi tes déclarations de variables par ex: dim i,s as integer (i est variante et s un integer !) en mémoire c'est pas du tout pareil)
regarde aussi les fonctions de chaine de caractères (un bon instr vaut mieux qu'un mauvais mid pour rechercher un caractère)...j'en ai fait l'experience !!)
sinon bien sur comme disait Jack, programme toi une fonction avec GetTickCount afin de savoir ou ton programme est le plus long
Si tu utilise le mode DAO tu fait surement un rst.movelast et movefirst...ca prend 1s ou 2 mais dans une boucle c'est enorme...
Voila les premières idées qui me viennent mais ton problème demande a etre approndondis
@+
Metalcoder
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kepone
Messages postés25Date d'inscriptionvendredi 2 août 2002StatutMembreDernière intervention 3 juillet 2008 17 janv. 2005 à 15:50
Ok merci les gars. Effectivement je suis en mode DAO et je fais beaucoup de movefirst movelast pour mes enregistrements dans des boucles. Je vais tester GetTickCount (je ne connaissait pas) Pour ce qui est de la mémorisation d'infos en mémoire je n'en mémorise pas beaucoup si ce n'est le nom des forms qui en ouvre d'autre afin de faire une gestion de form mère / fille qui fonctionne. Sinon tous les enregistrements de base de données sont chargées dans des listview. Il peut par moment y avoir 5 listView de charger en même temp. Une question : si une forme contient une listview et des boutons, lorsque j'Unload la form les objets qu'elle contient sont bien déchargées eux aussi ??
je vais continuer à chercher et je vous tient au courant.