Форум: "Прочее";
Текущий архив: 2011.05.15;
Скачать: [xml.tar.bz2];
ВнизМетоды проверки утечки памяти в программе Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c