Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1222019809
Сергей
2008-09-21 21:56
2008.11.02
Алгорит записей в БД накладных...


11-1194706878
matroskin66
2007-11-10 18:01
2008.11.02
Несколько форм в dll


2-1222435595
workbench
2008-09-26 17:26
2008.11.02
Uninstall


2-1222063511
asdfgh
2008-09-22 10:05
2008.11.02
IP


4-1199201118
MFN+
2008-01-01 18:25
2008.11.02
Как получить имя Mapped файла по его Handle





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский