Методи за изпитване на изтичане на памет в програмата
Кажете ми, как да се провери дали има изтичане на памет в програмата или не. Като за този специален компоненти са?
FastMM4, MemProof, # XA0; AQTime
Тук кажа. Аз открих, че тази функция повикване в течение причинява изтичане на памет. Защо?
TMyRec = рекорд
# XA0; MStr: String;
# XA0; USTR: String;
# XA0; ID: цяло число;
приключи;
функционира GetMR: TMyRec;
започвам
ZeroMemory (@Result, SizeOf (Резултат));
Result.MStr: = "Текст";
Result.UStr: = "Текст";
Result.ID: = 1;
приключи;
През втория и следващите влизания Резултати съдържа стари данни.
За да е ясно, което правя ZeroMemory (@Result, SizeOf (Резултат));
Но открих, че ако премахнете процедурата, след изтичане на памет няма.
Защо? И точно в този случай, почистете резултатът?
> # XA0; открили, че се обадите на тази функция в цикъла, което води до
> Теч памет.
а като сте открили?
и ако не е String и използването ShortString, ще се появят течове?
Отворя диспечера на задачите на Windows и погледнете в паметта, която се консумира. Ако премахнете ZeroMemory низ, използваната памет вече не се увеличава.
> Отваряне на диспечера на задачите на Windows и погледнете в памет на това
> Цена
коя колона гледаш? Няма създадени графа отразява действителната заетост памет.
Теч се случва, защото не е нужно да се направи дълги редици ZeroMemory
Вижте "Memory", след като "процесора".
Да, със сигурност, ако направите като String [250], споменът остава непроменен. Забравих, че низ също е дин. масиви.
За ужасно Baks * 99
> Бакс # XA0; (1/31/11 03:07) [11]
>
> За нещастен Baks * 99
>
Можете и "жалък". И ние сме по-спокойни.
И съвсем реална помощ (техническа помощ) от много реални хора.
Между другото по този въпрос и високо уважаван форум. (Да, и други известни руски език форуми Delphi).
Послепис За "болен от шарка $ 99." Колко харчите на месец на мобилния си телефон?
P.P.S. Или ти неразбрани?
> # XA0; Или аз ви разбрали?
> Колко харчите на месец на мобилния си телефон?
FastMM4 пита SHFolder.dcu. Къде да го получа? Къде трябва да бъде? Имам Delphi 5.
Бакс # XA0; (30.01.11 19:54)
MStr: String;
Прашки nizya ZeroMemory, Sterling е указател.
и излитане за това:
процедура TForm1.Button1Click (Sender: TObject);
Var
# XA0; и: цяло число;
# XA0 р: указател;
започвам
# XA0, защото: = 0-10 направи
# XA0; започне
# XA0; # XA0; GetMem (р, 1,048,576);
# XA0; # XA0 р: = 0;
# XA0; # XA0; FreeMem (р);
# XA0; край;
приключи;
Напитката пациент? не
Димът пациент? не
На жените ходят? не
Лекар: пациентът не се противопоставят, аз все още се намери, че да.
> String nizya ZeroMemory
Да, аз вече знаех. Аз просто изтръгна ми прашки :)
> Пациентът не се противопоставят, аз все още се намери, че да бъде
И това е, което аз все още искам да попитам:
Connected FastMM, получих:
В това приложение, изтичане на памет случи. Теч на малки по размер блокове (с изключение на регистрирано от очакваното индекс на изтичане): 37 - 52 байта: AnsiString х 1
Това се дължи на следния код:
инициализация
# XA0; AppPath: = ExtractFilePath (ParamStr (0));
# XA0; FilesPath: = AppPath + FilesDirName + "";
Още публикации за теча не се показват. Знаете го правя?
И още един въпрос: Защо няма данни за променлива FilesPath?
> Бакс # XA0; (30.01.11 19:54)
>
> Prompt, как да се провери дали има изтичане на памет в програмата
> Или не. Като за този специален компоненти са?
започвам
# XA0; writeln (ParamStr (1));
край.
и бягай
за %% н в (F:. \ mypath \ * вх) направи a.exe %% п
В Taskmgr ние виждаме, че изтичане на памет. Някъде.
a.exe "F: \ mypath \ file1.ent"
a.exe "F: \ mypath \ file2.ent"
a.exe "F: \ mypath \ file3.ent"
a.exe "F: \ mypath \ file4.ent"
.
Аз съм тук с FastMM разбрах веднага, като всички истински, понякога аз се използват, ако забравя, че
Аз съм пътят, и двете тези членове наскоро са прочели през Google намерен.
Свързани статии