Форум: "Основная";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Внизстранная утечка памяти Найти похожие ветки
← →
Venkin (2008-02-01 01:28) [0]имеем: свежеустановленную D 2007 ( в комплекте - Indy), windows xp SP2, fastmm4.
новый проект, на форму ложим idhttp1 компоненту, подключаем fastmm4, запускаем проект.
закрываем окно -- получаем сообщение об утечке:
В этом приложении происходят утечки памяти. Утечки блоков маленького размера (исключая ожидаемые утечки зарегистрированные по указателю):
5 - 12 байт: TIdThreadSafeInteger x 1
21 - 28 байт: TIdCriticalSection x 2
заметьте, никаких событий и действий в проекте не делал, только положил компоненту на форму и все.
убрал компоненту idhttp1, убрал все связанное с ней из uses, запустил проект, закрыл окно - никаких утечек нет.
что это такое?
← →
sniknik © (2008-02-01 08:22) [1]если Indy десятый то там есть глюк (а может и не один), после коннекта, хотя бы одного установленного соединения при завершении программы (закрытии соединения) ошибка прерванной процедуры (чтото типа...).
может они и не связанные, но вполне можно предположить что если чтото прерывается (особенно поток), а не завершается нормально... могут быть утечки. ошибка видно только при запуске из под дельфей (там пустой try except, хотя и с длинным пояснением почему и когда считать что можно игнорировать... но все таки).
в общем посмотри, может быть связано
http://delphimaster.net/view/6-1189799328/
> заметьте, никаких событий и действий в проекте не делал
ты не делал, он (сам компонент) делал - организовал слушающий поток, цикл в нем (execute)...
← →
Venkin (2008-02-01 11:44) [2]с Indy это не связано походу.
сейчас проверил на rxLib 2.75 и дельфи 7 --
утечки по прежнему идут в компонентах: RXGifanimator, RXFormStorage.
есть идеи?
← →
ketmar © (2008-02-01 12:25) [3]конечно. люди не озадачиваются освобождением ресурсов — оставляют эту задачу ОС.
← →
Palladin © (2008-02-01 12:28) [4]
> Venkin (01.02.08 01:28)
ты даже не представляешь какой толмут ликов выдается при использовании DevExpress...
← →
Venkin (2008-02-01 12:48) [5]другими словами, вы хотите сказать, -- не обращать внимания на утечки памяти, оставить все как есть? как же так, это ведь не правильно...
← →
ketmar © (2008-02-01 13:00) [6]>[4] Palladin ©(01.02.08 12:28)
тык чтобы использовать DevExpress — это очень экстремально альтернативным надо быть…
← →
homm © (2008-02-01 13:27) [7]> [5] Venkin (01.02.08 12:48)
> другими словами, вы хотите сказать, -- не обращать внимания
> на утечки памяти, оставить все как есть?
Не используй эти компоненты, или дорабатывай вручную
← →
Loginov Dmitry © (2008-02-01 22:27) [8]> другими словами, вы хотите сказать, -- не обращать внимания
> на утечки памяти, оставить все как есть? как же так, это
> ведь не правильно...
Не правильно - это когда ты вызываешь много раз одну и ту же процедуру, в которой выделяется кусок памяти, освобождение которой не делается. Рано или поздно это может привести к реальным сложностям в работе программы. А то, что не осбовождаются глобальные объекты - не беда. Винда очистит все ресурсы самостоятельно. Хотя можно огрести проблемы и с глобальными объектами, если они размещены в DLL, которая тыщу раз загружается и выгружается (но это скорее исключение - так с DLL-ками обычно не работают)
← →
Venkin (2008-02-01 22:43) [9]окей, тогда перейдем к практике :)
как считаете, этот код корректен по отношению к памяти? в том смысле, что не останутся ли тут утечки?//глобальные переменные
var
Disp: IDispatch;
CurrentWB: IWebBrowser;
Editor: IHTMLDocument2;
Range: IHTMLTxtRange;
s1: string;
implementation
procedure TForm1.Webbrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
Disp := pDisp;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
s1 := concat("about:"<head>", #10#13, "</head>","<body>", "</body>");
Webbrowser1.Navigate(s1);
end;
procedure TForm1.ButtonBoldClick(Sender: TObject);
begin
if editor.selection.type_ = "Text" then begin
Range := (editor.selection.createRange as IHTMLTxtRange);
Range.execCommand("bold", false, emptyparam);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
// это событие по идее должно быть вызвано перед
// всеми другими, но после загрузки страницы. может его на таймер повесить...?
begin
CurrentWB := Disp as IWebBrowser;
editor := (CurrentWB.Document as IHTMLDocument2);
end;
initialization
OleInitialize(nil);
finalization
OleUninitialize;
end.
← →
homm © (2008-02-01 22:46) [10]> procedure TForm1.FormCreate(Sender: TObject);
> begin
> s1 := concat("about:"<head>", #10#13, "</head>","<body>",
> "</body>");
Это как?
← →
DrPass © (2008-02-01 23:51) [11]
> Venkin (01.02.08 12:48) [5]
> другими словами, вы хотите сказать, -- не обращать внимания
> на утечки памяти, оставить все как есть? как же так, это
> ведь не правильно...
Если программа во время работы забывает корректно освободить два блока по 28 байт, на это можно закрыть глаза, чесслово
← →
Venkin (2008-02-02 00:12) [12]
> Это как?s1 := concat("about:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">", #10#13,
"<head>", #10#13, "<meta http-equiv="Content-Type" content="text/html; charset=unicode">", #10#13, "</head>","<body>", "</body>");
это непринципияльно, мне важно знать, верно ли построение событий в коде [9].
почему-то сразу при запуске программа ловит AV... :(
> Если программа во время работы забывает корректно освободить
> два блока по 28 байт, на это можно закрыть глаза, чесслово
просто я смотрю ProcessExplorer-ом, она открывает несколько тредов и постоянно растет счетчик I/O (Other)
http://i016.radikal.ru/0802/18/efcb9fbf9a55.jpg
← →
Johnmen © (2008-02-03 02:48) [13]
> просто я смотрю ProcessExplorer-ом, она открывает несколько
> тредов и постоянно растет счетчик I/O (Other)http://i016.
> radikal.ru/0802/18/efcb9fbf9a55.jpg
И чего?
← →
Venkin (2008-02-03 11:16) [14]
> И чего?
хм, наверно ничего страшного, посмотрел у штатного IE тоже счетчик растет :)
окей, всем спасибо ! :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c