Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.05.2012, 11:13
yujin1st yujin1st вне форума
Прохожий
 
Регистрация: 02.05.2012
Сообщения: 2
Версия Delphi: xe2
Репутация: 10
По умолчанию Создание и отображение большого количества Tlabel run-time

Здравствуйте.
В своем приложении я постоянно создаю и удаляю объекты Tlabel, для отображения данных. Проблема в том, что при отображении уже 20 надписей возникает ощутимая задержка. DoubleBuffered на родительском не помогает. Application.ProcessMessages лишь позволяет наблюдать за процессом создания, а не смотреть на застывшее окно.
Код:
  
// в цикле создаем надписи.
        aLabel:=TLabel.Create(scrlbx);
        labels.Add(aLabel); // список TList для последующей работы 
        with aLabel do begin
          Left:=pointLeft;
          Top:=pointTop;
          Caption:='title';
          parent:=scrlbx; //TScrollBox
        end;
        pointTop:=pointTop+20;
Чуть ускорил дело вынос из цикла создания в другой последующий цикл процесс присвоения родителя. Но проблему не решил.
Код:
for I := 0 to labels.Count-1 do begin
     TLabel(labels[i]).Parent:= scrlbx;
  end;

Выключение и включение параметра Visible до и после циклов также не спасает.
Ответить с цитированием
  #2  
Старый 02.05.2012, 11:19
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Создание и удаление делать стоит как можно реже, т.к. выделение и освобождение памяти - медленные операции. ИМХО лучше менять параметры уже созданных (в том числе скрывать ненужные).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 02.05.2012, 11:25
yujin1st yujin1st вне форума
Прохожий
 
Регистрация: 02.05.2012
Сообщения: 2
Версия Delphi: xe2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Создание и удаление делать стоит как можно реже, т.к. выделение и освобождение памяти - медленные операции. ИМХО лучше менять параметры уже созданных (в том числе скрывать ненужные).

Я засекал время для 100, 200, 500 объектов (больше не использую)
Само создание объектов происходит, как раз, быстро.
Узкое место именно в отображении...
И тормоза начинаются от 20-30 штук.
Ответить с цитированием
  #4  
Старый 02.05.2012, 11:44
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

попробуй перед удалением/добавлением сделать TScrollBox.AutoScroll:=False; потом вернуть True. на 500 TLabel время удаления/создания занимает 200мс.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter