Текущий архив: 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.45 MB
Время: 0.011 c