Dynamically created forms VS Components

9 отговора 303 прегледа
#1

Dynamically created forms VS Components

Hi! Правило ли ви е впечатление какво се случва с паметта, когато се стартира OpenDialog или SaveDialog от форма (може да се види примерно в TaskManager)? При мен използваната памет скача с около 6000K (!!!) и след затваряне на диалога не спада... Пробвах същото с Corel - пак така.
За себе си отдавна съм възприел подхода да създавам модалните диалози динамично (Create) и да ги затривам (Free) след употреба (не са в списъка auto-create forms на проекта). Ама за стандартните компоненти ми се вижда тъпо да ползвам този подход - нали за това уж е тоя VCL...
Вие какво правите по въпроса?

Отговор
в отговор на bass #2

Re: Dynamically created forms VS Components

Ne sam mnogo zapoznat no dokolkoto znam ideiata na Collectora e da ne se osvobojdava pamet dokato ne potribva nova svobodna takava, zashtoto
ako pak otvorish dialoga toii ve4e si ima "miasto" i se uveli4ava skorosta za izpalnenie po NewObject.Create()...
Ne pretendiram za kompetentnost ,prosto niakade sam go 4el i mi e ostanal takav spomen...

Отговор
в отговор на Efex #3

Re: Dynamically created forms VS Components

Има смисъл да е така, но не съм срещал нищо по въпроса - ще поровя, може (и дано) да да се окажеш прав :-)

Отговор
в отговор на bass #4

Re: Dynamically created forms VS Components

И моя подход е същия: правя си формите динамично с Create и Free.
Специално OpenDialog-а се менажира Windows-ките библиотеки, затова и при Corel е същото.
А memory manager-a на Delph-то има навика да взима памет без да я освобождава. На това му казват "плато", т.е. в началото бързо достигна някакъв максимум и после бавно нараства.
Един голям хищник на тема памет е ReAllocMem, btw.

Отговор
в отговор на ess #5

Re: Dynamically created forms VS Components

Ми тва е много досадно :-((( Сега човъркам от любопитство и наблюдавам следните неща:
1. Пускам гола форма с един ListBox, в който има 3 елемента. След всяко цъкане в него заетата памет се увеличава с 1-2K - за кво?
2. Веднага след отварянето на формата заетата памет е с пъти повече от размера EXE-то...

Отговор
в отговор на bass #6

VCL

Ne sam go kazwal no pak sha go poftorq - naj golemiq problem na delfito e VCL-a toj si praj koto si iska a ne kakwoto mu kazwat. Inache po waprosa za pametta - taka e i ne samo s komponentite kadeto e wazmojno izbqgwaj da polzwash VCL i problema shte se minimizira.

BTW proveri za alternatiwni memorymanageri na sajta na borland - sekciq comuniti ili klkto i wikat sega - tam ima/she edin Multithreadet memory manager deto dawa dobri rezultati.

Za ostanaloto ne se trewoji - delfito skoro nqma da nawleze w poleto na EmbededSystems a za sicki ostanali friwolno dopuskaj che 10 Megs Ram ne sa problem :))

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на SDR #7

Re: VCL

В рамките на шегата и с възможно най-малки букви бих попитал: Че кво остава от Delphi, като му махнеш VCL-а? Само познатата begin-end конструкция... само като си помисля колко време от безценния си живот прекарвам напоследък в писане на begin-end вместо {}
:-)))

Отговор
в отговор на bass #8

Re: Dynamically created... правилния отговор

според мен се крие в използването на Shell32.dll - погледни колко му е размера - и след това ще разбереш къде е проблема... ;-)))
Познал ли съм - проблема на тези "стандартни" диалогови кутии - е 4е използват "стандартните" win контроли - и паметта се "губи" там!!!
Начина по който измерваш паметта не е много точен - виж какво се случва след затварянето на приложението - ако искаш да освободиш обаче паметта - има функция която "изхвърля" неизпозлваните библиотеки

---
Е т'ва е живот!
Отговор
в отговор на bass #9

Re: VCL

Ами доста остава - това че ти си се ограничил до цъкането по бутоните и използването на стандартни VCL - компонети - това е твой проблем - а мисля че писането на begin ... end е най-малкия проблем - не и със съществуващите code completition експерти

А ако искаш да оползотвориш безценния си живот - занимавай се с чисто OOП - без значение на езика - ако искаш си напиши компилатор/транслатор който да задоволява небходимостите ти от по прецизно използване на безценното ти време



---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #10

Re: VCL

Самоиронията, казват, е измежду най-тънките прояви на интелекта...

Отговор