Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.15;
Скачать: CL | DM;

Вниз

Методы проверки утечки памяти в программе   Найти похожие ветки 

 
Baks   (2011-01-30 19:54) [0]

Подскажите, как вы проверяете, есть ли утечка памяти в программе или нет. Вроде для этого специальные компоненты есть?


 
DVM ©   (2011-01-30 20:49) [1]

FastMM4, MemProof,  AQTime


 
Baks   (2011-01-30 21:31) [2]

Вот подскажите. Обнаружил, что вызов данной функции в цикле приводит к утечке памяти. Почему?

TMyRec = record
  MStr: String;
  UStr: String;
  ID: Integer;
end;

function GetMR: TMyRec;
begin
ZeroMemory(@Result, SizeOf(Result));

Result.MStr := "Text";
Result.UStr := "Text";
Result.ID := 1;
end;

При втором и последующих входах Result содержит прежние данные.
Чтобы их очистить я выполняю ZeroMemory(@Result, SizeOf(Result));
Но обнаружил, что если эту процедуру убрать, то утечки памяти не будет.
Почему? И как правильно в данном случае очищать Result?


 
DVM ©   (2011-01-30 21:37) [3]


>  Обнаружил, что вызов данной функции в цикле приводит к
> утечке памяти.

а как ты обнаружил?


 
NailMan ©   (2011-01-30 21:48) [4]

а если не String, а ShortString использовать, утечки будут наблюдаться?


 
DVM ©   (2011-01-30 21:49) [5]


> NailMan ©   (30.01.11 21:48) [4]

нет конечно


 
Baks   (2011-01-30 21:50) [6]

Открываю Менеджер задач Windows и смотрю на память, которая расходуется. Если убрать строку ZeroMemory, то используемая память перестаёт увеличиваться.


 
DVM ©   (2011-01-30 21:53) [7]


> Открываю Менеджер задач Windows и смотрю на память, которая
> расходуется

Столбец какой смотришь? Там не любой столбец отражает реально занимаемую память.
Утечка у тебя возникает потому что не надо делать длинным строкам ZeroMemory


 
Baks   (2011-01-30 21:58) [8]

Смотрю "Память" после "ЦП".
Да, точно, если сделать например String[250], то память остаётся неизменной. Я забыл, что строки это тоже дин. массивы.


 
Ega23 ©   (2011-01-31 01:07) [9]

{$IFDEF DEBUG}
ReportMemoryLeaksOnShutDown := True;
{$ENDIF}


 
Германн ©   (2011-01-31 01:55) [10]


> Вроде для этого специальные компоненты есть?

Наберусь наглости (весьма оправданной, кстати) и посоветую автору http://www.eurekalog.com/index_delphi.php


 
Baks   (2011-01-31 03:07) [11]

За жалких Baks * 99


 
Германн ©   (2011-01-31 03:23) [12]


> Baks   (31.01.11 03:07) [11]
>
> За жалких Baks * 99
>

Тебе может и за "жалких". А нам спокойнее.
А тебе вполне реальная помощь (техподдержка) от весьма реальных людей.
Кстати весьма уважаемых на сём форуме. (Да и на других известных русскоязычных форумах по Дельфи).

P.S. О "жалких $99". Сколько ты в месяц тратишь на свой мобильник?

P.P.S. Или я тебя неправильно понял?


 
Baks   (2011-01-31 04:07) [13]


>  Или я тебя неправильно понял?


Правильно :)


> Сколько ты в месяц тратишь на свой мобильник?


Это точно не по адресу :) Я самый невыгодный абонент в мире. За месяц могу не потратить ни рубля. Я им почти не пользуюсь. Следующий вопрос наверно будет про пиво :)
А вообще я пожалуй за $1,119 возьму. У меня как раз они в кармане валются валяются :)


 
Baks   (2011-01-31 05:50) [14]

FastMM4 просит SHFolder.dcu. Где его взять? Где он должен быть? У меня Delphi 5.


 
Slym ©   (2011-01-31 07:19) [15]

Baks   (30.01.11 19:54)
MStr: String;

стринги низя ZeroMemory, стринга это указатель...
а ты сними делаешь вот это:
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 p:pointer;
begin
 for i:=0 to 10 do
 begin
   GetMem(p,1048576);
   p:=0;
   FreeMem(p);
 end;
end;


 
Slym ©   (2011-01-31 07:21) [16]

http://delphimaster.net/view/15-1296165080/
тамже все расписано


 
Anatoly Podgoretsky ©   (2011-01-31 08:52) [17]

> Baks  (31.01.2011 04:07:13)  [13]

Пациент пьете? Нет
Пациент курите? Нет
С бабами гуляете? Нет

Доктор: пациент не сопротивляйтесь, я все равно что ни будь найду.


 
Baks   (2011-02-01 13:44) [18]


> стринги низя ZeroMemory


Да я уже понял. Я просто рвал свои стринги :)


> пациент не сопротивляйтесь, я все равно что ни будь найду


Пусть ищет :)

А я вот что ещё хочу спросить:

Подключил FastMM, получил:

В этом приложении происходят утечки памяти. Утечки блоков маленького размера (исключая ожидаемые утечки зарегистрированные по указателю): 37 - 52 байт: AnsiString x 1

Это происходило из-за следующего кода:

initialization
 AppPath := ExtractFilePath(ParamStr(0));
 FilesPath := AppPath + FilesDirName + "\";

Добавил:

finalization
 Finalize(AppPath);

Больше сообщения об утечке не выводятся. Правильно ли я сделал?
И ещё вопрос: почему ничего не сообщается о переменной FilesPath?


 
IPranker ©   (2011-02-01 14:32) [19]


> Baks   (30.01.11 19:54)
>
> Подскажите, как вы проверяете, есть ли утечка памяти в программе
> или нет. Вроде для этого специальные компоненты есть?


http://www.gunsmoker.ru/2009/05/blog-post_24.html


 
TUser ©   (2011-02-01 16:13) [20]

А вот утечка в программе cmd.exe

{$apptype console}

begin
 writeln (ParamStr (1));
end.

и запускаем

@echo off

for %%n in ( F:\mypath\*.ent ) do a.exe %%n


В taskmgr видим, что память течет. Куда-то.

Запускаем так

@echo off

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


Не течет.


 
Дмитрий Тимохов   (2011-02-01 17:53) [21]

Я вот с FastMM разбирался когда-то, вроде все актуально, сам иногда пользуюсь, если забуду что

http://timokhov.blogspot.com/2007/03/delphi-2007-iii-fastmm.html

PS Остальное не читать. Меня кроме этой статьи на что-то реально полезное не хватило. Слабак.


 
Дмитрий Тимохов   (2011-02-01 17:53) [22]

Да, и http://www.gunsmoker.ru надо читать. Ищи на сайте, у него там масса материалов по теме.


 
Baks   (2011-02-01 21:27) [23]


> http://www.gunsmoker.ru/2009/05/blog-post_24.html
> http://timokhov.blogspot.com/2007/03/delphi-2007-iii-fastmm.
> html


Я кстати обе эти статьи уже недавно читал, через google находил.



Страницы: 1 вся ветка

Текущий архив: 2011.05.15;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.01 c
2-1297274384
seco2nd
2011-02-09 20:59
2011.05.15
Печать отчета в html из бд access с выводом полей типа MEMO, OLE


3-1258986556
Diplomat
2009-11-23 17:29
2011.05.15
Заполнение ComboBox значениями из БД


15-1295855310
12
2011-01-24 10:48
2011.05.15
посоветуйте простой http перехватчик траффика. Локально нужен.


2-1297027755
Вартам
2011-02-07 00:29
2011.05.15
Сортировка записей.


1-1254293884
d@vinchi
2009-09-30 10:58
2011.05.15
Как привести дату XML формата к обычному формату?