![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Память, сжираемая приложением. [D7, WinXP]
Incognito © (2006-10-12 22:52:00)Здравствуйте
Воникла пара вопросов:
1. Почему приложения, написанные на Дельфях, при стандартных условиях сжирают от 3х метров оперативной памяти?
2. Тут уже конкретная пролема:
Есть процедура создания XML файла при помощи класса TXMLDocument. Выглядит процедура вот так:
procedure CreateHistoryFile(filename : string);
var
newHistory : TXMLDocument;
begin
newHistory := TXMLDocument.Create(fmMain);
newHistory.Active := true;
newHistory.Version := '1.0';
newHistory.Encoding := 'utf-8';
newHistory.StandAlone := 'yes';
newHistory.AddChild('history');
newHistory.SaveToFile(filename);
newHistory.Active := false;
newHistory.Free;
end;
При выполнении процедуры приложение нчинает съедать тут же на 1,5 метра больше, однако, казалось бы, объект создан - потребность в ресурсах возрастает, все логично. Но в конце процедуры объект-то вроде уничтожается. Однако потребляемая память остается на том же уровне.
Просвятите пожалуйста по этому вопросу.
Ketmar (2006-10-15 19:09:00) [1]>[19] ors_archangel(c) 15-Oct-2006, 15:08
>уточняю: сделать что-нить автоматическипри выходе
>из процедуры, а не "руками", почему бы и нет?
вот строки, например. и динамические массивы. и интерфейсы. сплошная автоматика. без рук и ног.
>перестарался: когда в Делфи отключаешь Stop on Delphi
>exceptions - то трудно искать ошибки, а иначе - уже
>невозможно использовать исключения как исключения
среда -- она настраивается. полазить по менюшкам -- столько интересного узнаешь...
>кажется, правильней говорить "ортогональный"
не надо употреблять термины, значение которых теряется во мгле разума.
>стоит Kylix и .NET) они не очень-то хотят улучшать
>компилятор и язык, собственно, программирования
постоянно улучшают, аднака...
Anatoly Podgoretsky (2006-10-15 15:25:00) [2]
> Паскаль воще сам кого хошь убью :)
Не похоже, похоже, что хочешь Борланда убить.
Anatoly Podgoretsky (2006-10-15 15:10:00) [3]ors_archangel © (15.10.06 15:08) [19]
Барин, может вам Дельфи настроить и заодно научиться пользоваться точками останова?
ors_archangel (2006-10-15 15:08:00) [4]
> >раз хотелось сделать какие-нить действия при выходе из
> >процедуры
> с try ... finally, видимо, ни разу не знаком.
уточняю: сделать что-нить автоматическипри выходе из процедуры, а не "руками", почему бы и нет? (знаком я с finally, и, кстати, считаю, что и здесь Борланд перестарался: когда в Делфи отключаешь Stop on Delphi exceptions - то трудно искать ошибки, а иначе - уже невозможно использовать исключения как исключения, а не как только ошибки - как другой управляющий элемент, в смысле, IDE будет постоянно приставать :(
> язык в целом менее строгий
почему тогда в С++ нужно постоянно писать а = (б) в, по-моему, типизация здесь более строгая, чем в Делфи, мне кажется, правильней говорить "ортогональный"
> >от Борланда ведь не дождёшся
> ага. не любят они "как все", любят "как удобно".
Я имею в виду, что Борланд (или как его там), конечно, отличная (считаю, лучшая) комания по разработке коммерческого ПО быстрой разработки, известная мне, но тем не менее, прилагая титанические усилия (например, чего стоит Kylix и .NET) они не очень-то хотят улучшать компилятор и язык, собственно, программирования, чего я не понимаю ну никак, а за Паскаль воще сам кого хошь убью :)
Vovan#1 (2006-10-14 01:16:00) [5]> Ложное утверждение
Утверждение о том, что это утверждение ложное - ложно.
Ketmar (2006-10-13 17:11:00) [6]>[14] ors_archangel(c) 13-Oct-2006, 15:12
>раз хотелось сделать какие-нить действия при выходе из
>процедуры
с try ... finally, видимо, ни разу не знаком.
>Си-плю-плю вроде так умеет, если я не обшибаюсь
ошибаешься.
>переходим на Си, товарищи
скатертью дорога.
>от Борланда ведь не дождёшся
ага. не любят они "как все", любят "как удобно".
RWolf (2006-10-13 17:00:00) [7]С++ уничтожает на выходе из блока только стековые объекты. С динамической памятью дела обстоят так же, как и в Дельфи, утечек в С++ приложениях не меньше. Зато возможностей допустить ошибку намного больше, т.к. язык в целом менее строгий и более сложный в использовании. Лучше уж писать на Дельфи, но как положено :)
Игорь Шевченко (2006-10-13 15:13:00) [8]
> 1. Почему приложения, написанные на Дельфях, при стандартных
> условиях сжирают от 3х метров оперативной памяти?
Ложное утверждение
ors_archangel (2006-10-13 15:12:00) [9]
> Но в конце процедуры объект-то вроде уничтожается.
В Делфи - нет, в чём, мне кажется, есть недостаток, мне не раз хотелось сделать какие-нить действия при выходе из процедуры (области видимости, говоря более обще), но ...
Си-плю-плю вроде так умеет, если я не обшибаюсь, переходим на Си, товарищи, будем как все, от Борланда ведь не дождёшся
atruhin (2006-10-13 05:09:00) [10]> fastMM - аналог, только работае по другому..
+ проще в использовании и удобнее.
Kolan (2006-10-12 23:52:00) [11]
> Метод Kolan-a с try finally тоже не помог ((
Ясен пень, хоть бы справку почитал. Так правильней просто...
> Буду искать MemProof
>
Ищи конечно.
fastMM - аналог, только работае по другому..
Incognito (2006-10-12 23:45:00) [12]Indy не пользую, с инетом работаю через WinInet.
Метод Kolan-a с try finally тоже не помог ((
Буду искать MemProof
Ketmar (2006-10-12 23:41:00) [13]>[8] Incognito 12-Oct-2006, 23:34
>Вопрос №1 - кто такие индейцы?
Indy. у меня к ним нелюбовь по личным причинам. %-)
Kolan (2006-10-12 23:35:00) [14]
> это встроенный инструмент или прога какая сторонняя?
Сторонняя работает хорошо, строку покажет.
Incognito (2006-10-12 23:34:00) [15]
Ketmar © (12.10.06 23:19)
ищи memory leaks. и прочие leaks. выкинь индейцев, используй API. выкинь всякие формировалки XML, сделай руками. выкинь VCL, сделай на API. поможет. %-)
На API написать - квалификации не хватит, к сожалению. Не программист я все-таки.. так, увлекающийся ) Без VCL тоже не обойдусь. по той же причине.
Вопрос №1 - кто такие индейцы? И как с ними бороться? ))
Вопрос про MemProof - это встроенный инструмент или прога какая сторонняя?
Суслик (2006-10-12 23:33:00) [16]1 скачать в www.sourceforge.net fastMM
2 разобраться с readme
3 установить
4 выяснить, где утекает память.
Kolan (2006-10-12 23:23:00) [17]
> поможет
Убить лишнее время. Хорошо если есть :)
Kolan (2006-10-12 23:20:00) [18]
> Причем моя программа имеет тенденцию к пожиранию все большего
> и большего колическтва ресурсов с течением времени.
>
А вот это плохо - утечка наверно. Для D7 попользуй MemProof
Ketmar (2006-10-12 23:19:00) [19]>[3] Incognito 12-Oct-2006, 23:15
>Причем моя программа имеет тенденцию к пожиранию все
>большего и большего колическтва ресурсов с течением
>времени.
ищи memory leaks. и прочие leaks. выкинь индейцев, используй API. выкинь всякие формировалки XML, сделай руками. выкинь VCL, сделай на API. поможет. %-)
Incognito (2006-10-12 23:15:00) [20]Тогда ещё вопрос... Вообщем, выкладываю все как есть.
Программа сидит в трее. Главной формы нет (т.е. она есть, но скрыта). По правому клику через меню можно вызвать форму с настройками, эбаут и ещё одну - статистику.
Суть программы сводится к периодическому скачиванию из инета определенного html файла, вырезания из него нужных данных и, запись данных в лог (почему-то вздумалось сделать его в формате XML). + исходя из настроек пльзователя, вывод этих данных в балон хинт.
Вот собственно и все. Все уже написано и относительно исправно работает, но меня смущает тот факт, что эта, простите, хрень, жрет порядка 10 мегабайт!!!
В то время как практически абсолютно аналогичный GisMeteoTray (погоду скачивает периодически и в трее об этом иконкой сигназизирует. При клике тот же балон хинт и подробной инфой), дак вот, он жрет всего лишь 500 Кило, что в 20 раз меньше.
Причем моя программа имеет тенденцию к пожиранию все большего и большего колическтва ресурсов с течением времени.
Вообщем, нужен мне совет ))