Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Память, сжираемая приложением.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.408 c
15-1159957324
Layner
2006-10-04 14:22
2006.10.29
Господа москвичи! Подскажите самый крупный IT универсам в столице


2-1160465938
shake
2006-10-10 11:38
2006.10.29
Shellexecute и динамические параметры


15-1159447965
Ученик чародея.
2006-09-28 16:52
2006.10.29
В наших вузах программистов учат всякой ерунде


15-1160565083
Маска
2006-10-11 15:11
2006.10.29
Про XML


2-1160653527
VALUA
2006-10-12 15:45
2006.10.29
StringGrid - хранение информации