Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ускорение работы `FMX TListBox`: оптимизация загрузки большого количества строк

Delphi , Компоненты и Классы , Списки

Ускорение работы FMX TListBox: оптимизация загрузки большого количества строк

При работе с компонентами в среде разработки Delphi, разработчики иногда сталкиваются с проблемами производительности. Одной из таких проблем является замедление работы FMX TListBox при загрузке большого количества строк. В данной статье мы рассмотрим, как можно ускорить работу этого компонента, используя примеры кода на Object Pascal (Delphi).

Проблема

Пользователь столкнулся с проблемой, когда загрузка 2000 имен в FMX TListBox занимала слишком много времени — до 35 секунд и более. Проблема была воспроизведена с помощью тестового кода, в котором в цикле добавлялись строки в список с использованием метода Items.Add.

procedure TDocWindow.DEBUGAddLotsOfStringsToList;
var
  theTimeAtStart: Integer;
  J: Integer;
begin
  ListBox1.Clear;
  theTimeAtStart := TThread.GetTickCount;
  for J := 1 to 2200 do
    ListBox1.Items.Add(J.ToString);
  ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;

Решение проблемы

Использование методов BeginUpdate и EndUpdate позволяет уменьшить время выполнения операции с 25 секунд до примерно 125 миллисекунд. Эти методы временно отключают обновление интерфейса, что позволяет избежать ненужных перерисовок и ускоряет процесс добавления элементов в список.

procedure TForm1.Button1Click(Sender: TObject);
var
  theTimeAtStart: Integer;
  J: Integer;
begin
  theTimeAtStart := TThread.GetTickCount;
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Clear;
    for J := 1 to 2200 do
      ListBox1.Items.Add(J.ToString);
  finally
    ListBox1.Items.EndUpdate;
  end;
  ShowMessage('There were ' + J.ToString + ' strings added to the list in ' + (TThread.GetTickCount - theTimeAtStart).ToString + ' milliseconds.');
end;

Обратите внимание, что метод Clear также должен быть выполнен внутри блока (Begin|End)Update, чтобы обеспечить оптимальную производительность.

Альтернативные способы

В качестве альтернативного ответа можно рассмотреть другие подходы к оптимизации, такие как использование более быстрых алгоритмов или предварительная подготовка данных перед их добавлением в список. Однако, в данном случае, подтвержденный ответ показал значительное улучшение производительности с помощью BeginUpdate и EndUpdate.

Заключение

Использование методов BeginUpdate и EndUpdate является эффективным способом ускорения работы FMX TListBox при загрузке большого количества строк. Это позволяет разработчикам улучшить производительность приложения без значительных изменений в логике программы.

При разработке на Delphi важно помнить о таких оптимизациях, которые могут значительно улучшить пользовательский опыт и общую производительность приложения.

Создано по материалам из источника по ссылке.

Ускорение работы FMX TListBox в Delphi через оптимизацию процесса загрузки большого количества строк.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 08:10:11/0.0059659481048584/0