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

Вниз

Как сразу выделить память для TComponent.Components?   Найти похожие ветки 

 
romeo ©   (2003-10-12 02:36) [0]

Доброго времени суток всем.
В графическом редакторе при чтении данных из файла динамически создается уйма объектов (потомки TGraphicControl) и размещается на форме (форма и Owner, и Parent для них соответственно).
Такая проблема: когда грузится порядка 2000 объектов времени уходит приерно 7 секунд, 4000 - уже более 40 с.
Подозреваю, что такой рост времен загрузки связан с замедлением скорости выделения памяти в Form1.Components при большом значении Form1.Components.Count.
Нельзя ли за один раз, зная кол-во загружаемых объектов, выделить в Form1.Components нужное кол-во памяти, а не по одному за итерацию цикла загрузки?
Или дело не в этом и я зря парюсь?
Заранее спасибо.


 
Palladin ©   (2003-10-12 02:51) [1]

нет, класс (class) это не запись (record) и одним вызовом конструктора несколько объектов одновременно не создать...

Здесь проблема в неверном построении приложения, возможно такое количество объектов используется неоправданно, и необходимо все таки хранить информацию поточно и непрерывно.
Тогда создав один объект нужного класса назначать ему его аттрибуты из потока при необходимости использования...

совет один: перепроектировать приложение


 
romeo ©   (2003-10-12 03:14) [2]

Не, я не имел ввиду сразу создать все объекты. Мысль была в установке емкости Form1.Components (TList) сразу равной количеству загружаемых впоследствии объектов.
А не увеличивать ее на единицу каждый раз при MyComponent := TMyComponent.Creаte(Form1), что каждый раз вызывает перераспределение памяти(емкости) у TList. Поле FComponents - в приват-секции и новое Capacity ему не присвоишь...
В принципе, я хотел узнать - стоит ли мне переписывать мою форму, чтобы сделать FComponents в public-секции и получить доступ к Capacity.
Или это не поможет и я не туда копаю?


 
romeo ©   (2003-10-12 03:23) [3]


> Palladin ©


> необходимо все таки хранить информацию поточно и непрерывно. Тогда создав один объект нужного класса назначать ему его аттрибуты из потока при необходимости использования...


Интересно, но не совсем понятно (нужных гимназиев мы не заканчивали :)) Можно чуть-чуть по-подробнее?
Заранее спасибо.


 
default ©   (2003-10-12 04:48) [4]

если проблема в том о чём ты думаешь, тогда если ты не хочешь частого перераспределения памяти зачем при создании объектов ты даёшь им Owner-ра(форму как ты сказал выше)?
передавай nil и дальше делай как выгодней


 
romeo ©   (2003-10-12 05:02) [5]


> default © (12.10.03 04:48) [4]

Дельная мысля! При одном и том же числе объектов время загрузки сократилось с 4,599с до 2,861с (1,6 раза)!
И как я сам не допер? Старею, старею...
Спасибо


 
default ©   (2003-10-12 05:30) [6]

romeo © (12.10.03 05:02) [5]
пожалуйста, просто когда много работаешь внимательность притупляется)с кем не бывает



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-74000
Patrick
2003-09-29 08:28
2003.10.23
Индексы для DBF


4-74537
iNew
2003-08-19 04:07
2003.10.23
Почему Icompatible types?


9-73958
Juster~
2003-04-20 13:49
2003.10.23
Организация рендеринга


14-74422
Knight
2003-10-03 00:01
2003.10.23
Кто чем интересуется в жизни?


14-74416
Zhirnov Maxim
2003-10-04 21:58
2003.10.23
Постоянные перезагрузки при работе в Интернете