Bonjour,
J'ai importé une librairie compilé en .Net. dans un projet sous Xe4 sous forme d'une unité.
J'utilise les fonctions et tout fonctionne parfaitement. Je peux constater une monté de la mémoire utilisé par mon programme, ce qui est normal car je lis beaucoup de données provenant d'un fichier .grb2
Mais après la destruction des objets instanciés et même de la fenêtre qui réalise ma fonction, aucune libération de mémoire ne s’effectue !
Après ma procédure:
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
18 FgribReadingFile := TgribReadingFile.Create; FgribReadingFile.gribValues := TDictionary<TdateTime, TGribFileRecord>.Create; FgribReadingFile.Grib2Input := nil; FgribReadingFile.Grib2Input := CoGrib2Input.Create; FgribReadingFile.Grib2Input.setFilename(ExtractFilePath(paramStr(0)) + 'Grib\' + fileGribName); FgribReadingFile.Grib2Input.scan(False, False); ProgressBar1.Max := FgribReadingFile.Grib2Input.RecordsCount - 1; FgribReadingFile.rec2 := Nil; FgribReadingFile.recData2 := nil; for I := 0 to FgribReadingFile.Grib2Input.RecordsCount - 1 do begin ProgressBar1.Position := I; .....
Et voici la procédure "Destroy" de TgribReadingFile surchargée où je libère tous les objets précédemment créés:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 FgribReadingFile.Grib2Input.closeFile; FgribReadingFile.recData2.closeFile; FgribReadingFile.Destroy;
Quelqu'un aurait-il déjà constaté pareil comportement ?
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
18
19
20
21
22
23
24
25
26
27
28
29 Destructor TgribReadingFile.Destroy; begin Grib2Input := Nil; Grib1Input := Nil; rec2 := Nil; rec1 := Nil; if recData1 <> nil then begin recData1.closeFile; recData1 := Nil; end; if recData2 <> nil then begin recData2.closeFile; recData2 := Nil; end; if gribValueObj <> nil then gribValueObj.Destroy; if filesvalue <> nil then filesvalue.Destroy; grecord := Nil; if gribValues <> nil then begin // FreeMemory(gribValues); gribValues.Destroy; end; inherited Destroy; end;
Merci pour votre aide.
Partager