Главная страница
    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.45 MB
Время: 0.011 c
1-74136
KDel
2003-10-10 22:36
2003.10.23
Редактирование ресурсов в exe


1-74300
Yahidze
2003-10-12 14:34
2003.10.23
Как подключить правильно Нelp


1-74246
able
2003-10-13 20:06
2003.10.23
Люди добрые! Очень надо!!


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


3-74034
Little_user
2003-10-03 09:46
2003.10.23
D5 ADO Dbf





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