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