Metode pentru verificarea scurgerilor de memorie din program

Metode pentru verificarea scurgerilor de memorie din program

Spuneți-mi cum verificați dacă există o scurgere de memorie în program sau nu. Se pare că există componente speciale pentru asta?







FastMM4, MemProof, # xA0; AQTime

Spune-mi aici. Am constatat că apelarea acestei funcții într-o buclă duce la o scurgere de memorie. De ce?

TMyRec = înregistrare
# xA0; MStr: String;
# xA0; UStr: String;
# xA0; ID: Integer;
se încheie;

funcția GetMR: TMyRec;
începe
ZeroMemory (@Result, SizeOf (Rezultat));

Result.MStr: = "Text";
Result.UStr: = "Text";
Result.ID: = 1;
se încheie;

La cea de-a doua intrare și la cele ulterioare, Rezultatul conține datele anterioare.
Pentru a le șterge, execut ZeroMemory (@Result, SizeOf (Result));
Dar am descoperit că dacă această procedură este eliminată, nu va exista nicio scurgere de memorie.
De ce? Și cât de corect în acest caz trebuie să ștergeți rezultatul?


> # xA0; a constatat că apelarea acestei funcții într-un rezultat al buclă
> scurgere de memorie.

dar cum ai găsit-o?

Și dacă nu String și ShortString pentru a utiliza, scurgeri vor fi observate?

Deschideți Managerul de activități Windows și uitați-vă la memoria consumată. Dacă eliminați linia ZeroMemory, atunci memoria folosită se oprește în creștere.


> Deschideți Managerul de activități Windows și uita-te la memoria respectivă
> este cheltuit

La ce coloană te uiți? Nu există nici o coloană care să reflecte memoria de fapt ocupată.
Scurgerea de la tine se datorează faptului că nu este necesar să faci linii lungi ZeroMemory

Urmarim "Memory" dupa "CPU".
Da, exact, dacă faceți, de exemplu, String [250], atunci memoria rămâne neschimbată. Am uitat că liniile sunt de asemenea dyne. matrice.

În spatele mizerabilului Baks * 99


> Baks # xA0; (31.01.11 03:07) [11]






>
> În spatele mizerabilului Baks * 99
>

Puteți și pentru "mizerabil". Și suntem mai liniștiți.
Și tu ești un ajutor destul de real (suport tehnic) de la oameni foarte reali.
Apropo foarte respectat în acest forum. (Și în alte bine-cunoscute forumuri de limba rusă pe Delphi).

P.S. Despre "mizerabilul $ 99". Cât cheltuiți pe telefonul mobil pe lună?

P.P.S. Sau v-am înțeles greșit?


> # xA0 sau v-am înțeles greșit?


> Cât cheltuiți pe telefonul mobil pe lună?

FastMM4 întreabă SHFolder.dcu. De unde pot să obțin? Unde ar trebui să fie? Am un Delphi 5.

Baks # xA0; (30.01.11 19:54)
MStr: String;
Thong nizya ZeroMemory, Thong este un pointer.
dar luați asta luați acest lucru:
procedura TForm1.Button1Click (expeditor: TObject);
var
# xA0; i: întreg;
# xA0; p: pointer;
începe
# xA0; pentru i: = 0 până la 10 nu
# xA0; începeți
# xA0; # xA0; GetMem (p, 1048576);
# xA0; # xA0; p: = 0;
# xA0; # xA0; FreeMem (p);
# xA0; sfârșitul;
se încheie;

Beți un pacient? nu
Fumatul pacientului? nu
Cu femeile de mers pe jos? nu

Doctor: Nu rezista pacientului, sunt tot ce găsesc.


> Thong Neez ZeroMemory

Da, am înțeles deja. Mi-am rupt taiul :)


> pacientul nu rezistă, nu-mi pasă ce găsesc

Iată ce vreau să întreb:

A conectat FastMM, a primit:

În această aplicație apar scurgeri de memorie. Scurgeri de blocuri de dimensiuni mici (cu excepția scurgerilor preconizate înregistrate prin pointer): 37 - 52 octeți: AnsiString x 1

Acest lucru se datorează următorului cod:

iniţializarea
# xA0; AppPath: = ExtractFilePath (ParamStr (0));
# xA0; FilesPath: = AppPath + FișiereDirName + "";

Nu sunt transmise mai multe mesaje de scurgere. Am făcut-o corect?
Și o altă întrebare: de ce nu este raportat nimic despre variabila FilesPath?


> Baks # xA0; (30.01.11 19:54)
>
> Spuneți-mi cum verificați dacă există o scurgere de memorie în program
> sau nu. Se pare că există componente speciale pentru asta?

începe
# xA0; writeln (ParamStr (1));
end.

și începe

pentru %% n în (F: \ mypath \ *. ent) faceți a.exe %% n

În taskmgr vedem că memoria curge. Undeva.

a.exe "F: \ mypath \ file1.ent"
a.exe "F: \ mypath \ file2.ent"
a.exe "F: \ mypath \ file3.ent"
a.exe "F: \ mypath \ file4.ent"
.

Am lucrat odată cu FastMM, că totul este relevant, uneori o folosesc, dacă o uit

Apropo, am citit recent aceste două articole, am găsit-o prin Google.







Articole similare

Trimiteți-le prietenilor: