Bonjour tout le monde,

Depuis Quelques temps je travaille sur un programme permettant de trouver quelles cartouches d'encre vont dans un modèle précis d'imprimante pour le mettre à disposition de clients dans un magasin sur une tablette tactile.

J'ai déjà fait appel à de l'aide pour ce programme dans un autre sujet http://www.developpez.net/forums/d15...fuite-memoire/

Toutes mes fonctions fonctionnent, le programme aussi, tout est implémenté... mais il me reste un petit problème que je n'arrive pas à identifier.

Pour commencer, voici le chemin à suivre pour obtenir les références des cartouches recherchées :
  1. on sélectionne la marque
  2. on sélectionne le type (cartouche ou laser)
  3. on sélectionne la famille de modèles
  4. on sélectionne le modèle
  5. on affiche alors le résultat


Tout se passe normalement, mais si l'on utilise le programme plusieurs fois d'affilé (ce qui est le but car il sera à disposition de clients dans un magasin sur une tablette), le temps mis pour afficher le résultat (transition entre étape 4 et 5) augmente petit à petit jusqu'à devenir long.

J'ai arrêté mon teste jusqu'à avoir 5-6 secondes de temps d'attente pour afficher le résultat, pendant ce temps rien ne se passe, comme si le programme était figé et "travaillait" en arrière plan.

Pour obtenir ce délai il m'a fallu faire 20-25 fois le chemin complet depuis le début (étape 1 à 5). Aux premières utilisations (jusqu'au 5 premières fois) l'affichage du résultat est immédiat.

En revanche, le délai entre toutes les autres étapes reste inchangé.

Il faut alors que je ferme mon programme, l'exécute à nouveau et là je retrouve le délai immédiat au début qui s'allonge avec le nombre d'utilisation.

Je fais de nouveau appel à un peu d'aide afin d'identifier l'origine du problème et le régler.

Mon code est dans le post suivant.

Par avance merci pour votre aide.






P.S. : Quelques indications pour se situer dans mon code...
la transition entre l'étape 4 et 5 (celle dont le temps augmente en fonction du nombre d'utilisations) se fait lorsque l'on clique sur un bouton pour choisir un modèle.
Via un SignalMapper (nommé modelsSignalMapper) je connecte chacun des boutons à un SIGNAL perso transmettant un QString (le nom du modèle) à un SLOT que j'ai créé (nommé RunResults()) pour modifier la fenêtre en cours :
- masquer les boutons de choix de modèle avec HideModelsButtons()
- puis afficher le nouveau contenu avec SetResultsInfos()

SetResultsInfos() lance la recherche des données dans ma base de données (un fichier .txt d'un peu moins de 800ko) par la fonction SearchResults() (prenant en paramètres le flux de ma base de données, un point de repère en gros pour déplacer le curseur dans lea base de données pour éviter de rechercher un doublon vu que certains modèles d'imprimantes ont le même nom, puis le modèle d'imprimante sélectionné), puis les attribue aux QLabel correspondant grâce à AssignResults() (prenant en paramètre mon flux).

Bien entendu, à chaque fois que je passe en paramètre mon flux, c'est par référence, le reste étant des string ou QString de 10-15 caractères maxi, je n'utilise pas de référence.

Tout ceci se termine par ShowResultsLabels() qui sert à afficher les QLabel.

Mes QLabel ainsi que tous mes QPusButton sont initialiser dès le lancement du programme et sont tous masqués. Ils sont alors affichés et/ou masqué à volonté en fonction des boutons cliqués.

Toutes les informations lues depuis ma base de données sont stockées dans des std::vector<std::string> qui sont vidés (via leur fonction clear()) à chaque fois que je reviens sur la même page (exemple, j'affiche un résultat donc mon vector se rempli pour l'afficher, je reviens au début du programme, je refais tout le chemin pour afficher un nouveau résultat, et juste avant d'afficher ce résultat, c'est là que le vector se vide).