Gestion de la mémoire / recherche de fuites

Gestion de la mémoire / recherche de fuites - C++ - Programmation

Marsh Posté le 26-02-2013 à 14:05:09    

Salut à tous,
 
J'ai besoin d'un peu d'aide.
Voilà la situation :
Je maintiens une application en C++ d'un demi million de lignes de code.
Les librairies utilisées sont celles de feu Ilog Views (Views 5.1 et Dblink 5)
L'éditeur utilisé est Visual Studio .NET 2003 (je sais on est à la bourre  :whistle: )
 
Suite à une remontée utilisateur, il s'avère qu'une longue utilisation de l'application a pour effet la perte de performances au niveau des interactions avec le grapher Ilog Views.
Pour information, le grapher est un conteneur graphique dans lequel nous créons des objets graphiques en 2D avec lesquels l'utilisateur peut interagir (création de nouveaux objets graphiques, sélection/suppression, sélection/déplacement, etc ...)
En utilisant le gestionnaire de tâches, je me suis aperçu qu'à chaque cycle où on vidait le grapher de ses objets et on le remplissait avec les mêmes objets, la mémoire utilisée par le processus de l'application augmente.
Selon moi cela ne doit pas être le cas. Lors d'un cycle remplissage/vidage, l'utilisation de la mémoire par le processus doit théoriquement revenir au même niveau qu'avant le cycle.
Il y a donc des fuites mémoire. Malheureusement, j'ai vérifié qu'on passait autant de fois dans les destructeurs des classes pour les objets graphiques supprimés du grapher que de fois dans les constructeurs de ces mêmes classes.  
 
1/ Pourrait il y avoir une autre explication que la fuite mémoire ? Autrement dit l'augmentation constante de la mémoire utilisée par le processus provient elle obligatoirement d'une fuite mémoire ?  
 
2/ Etant donné que la "fuite" semble provenir du grapher Ilog, y a-t-il moyen de le vérifier (sachant que je n'ai pas accès au code des DLL Ilog) ?
 
3/ J'essaie d'implémenter les outils de VLD ( => http://vld.codeplex.com/ ) afin de détecter d'éventuelles fuites. Est-ce que vous avez un peu d'expérience concernant cet outil ?
J'ai tout essayé, il semble que l'appel aux fonctions VLDEnable() et VLDDisable() n'ait aucun impact. Le dump n'est pas généré.
 
4/ Connaissez vous d'autres outils (simples à mettre en oeuvre et gratuits  :whistle: ) qui me permettraient d'avancer sur cette problématique ?
 
Je vous remercie par avance pour votre aide.  


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
Reply

Marsh Posté le 26-02-2013 à 14:05:09   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed