Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1160381382
kot andrei
2006-10-09 12:09
2006.10.29
бесплатный англо-русский словарь


11-1136982335
Vadim Petrov
2006-01-11 15:25
2006.10.29
Кладову - KolAdd


2-1160864503
z1bob
2006-10-15 02:21
2006.10.29
Вопрос от новичка. Про алгоритм и большой массив.


2-1159633389
crasher
2006-09-30 20:23
2006.10.29
Системная оболочка


2-1160741232
AlexanderMS
2006-10-13 16:07
2006.10.29
Обнаружение русской версии Windows.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский