Bonjour,
Je fais actuellement une petite application qui possède un ruban.
Je me suis aperçu, qu'à chaque fois que j'ouvre et referme un fichier, la mémoire montait et ne redescendait pas complètement.
Après différents tests, j'en suis arrivé au code suivant que j'ai collé sur un bouton pour le test.
La boite de dialogue d'ouverture du fichier s'ouvre quand j'appuie mais je ferme la fenêtre sans ouvrir un fichier, j'ai l'impression que toute la mémoire n'est pas libérée.
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 try { OpenFile1 = new TOpenDialog(Form1); if (OpenFile1 != NULL) { if (OpenFile1->Execute()) { //LoadFile(OpenFile1->FileName); } } } __finally { if (OpenFile1 != NULL) { delete OpenFile1; OpenFile1 = NULL; } }
Dans l'observateur d'évènement je regarde la zone "mémoire (jeu de travail privée)".
1) à l'ouverture : 3696K
2) appuie sur le bouton (ouverture de la boite de dialogue) : 8452K
3) de retour sur l'application : 7688K
2) appuie sur le bouton (ouverture de la boite de dialogue) : 9156K
3) de retour sur l'application : 8692K
2) appuie sur le bouton (ouverture de la boite de dialogue) : 9584K
3) de retour sur l'application : 9200K
Très rapidement on arrive à plus de 14M alors que l'on a réellement rien fait.
Code guard n'indique pas de fuite de mémoire tout comme la directive ReportMemoryLeaksOnShutdown.
D'ailleurs, si j'active cette directive, il y a encore beaucoup plus de mémoire de consommée.
Si je regarde le "différentiel de la plage de travail (mémoire)", je vois que la quantité allouée est toujours supérieure à la quantité libérée.
Savez-vous de quoi cela peut venir ?
Merci.
Partager