Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тормоза FMX сравнению с VCL / 9 сообщений из 9, страница 1 из 1
21.05.2021, 10:58
    #40071875
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
В VCL выполняется за ~180 мс, а в FMX ~2000мс !!!в десять раз!!!

Можно это как-то побороть или пока оно такое..?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  i: Integer;
  tm1: TTime;
begin
  tm1 := now;
  for i := 0 to 500 do cbb1.Items.Add('ljkhflkjshafljkhaldjkh ' + i.ToString);
  ShowMessage(IntToStr(i) + ' за ' +IntToStr(MilliSecondsBetween(now,tm1)));
...
Рейтинг: 0 / 0
21.05.2021, 11:02
    #40071878
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
У списка есть методы блокировки типа BeginUpdate
...
Рейтинг: 0 / 0
21.05.2021, 11:06
    #40071881
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
wadman
У списка есть методы блокировки типа BeginUpdate


Блин у TGrid использую, думал, здесь такого нет :) Спасибо, заработало оч быстро
...
Рейтинг: 0 / 0
21.05.2021, 11:37
    #40071889
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
Проблема не решена, она даже усугубилась :)

с TComboBox работает BeginUpdate

Но необходимо работать TComboEdit, у которого BeginUpdate тоже имеется, но вообще не помогает, 500 записей за 7000+мс

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  i: Integer;
  tm1: TTime;
begin
  tm1 := now;
  edt1.BeginUpdate;
  for i := 0 to 500 do edt1.Items.Add('ljkhflkjshafljkhaldjkh ' + i.ToString);
  edt1.EndUpdate;
  ShowMessage(IntToStr(i) + ' за ' +IntToStr(MilliSecondsBetween(now,tm1)));
...
Рейтинг: 0 / 0
21.05.2021, 11:40
    #40071890
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
Для реального ускорения можно писать ч-з AddStrings

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var
  i: Integer;
  tm1: TTime;
  arr: TArray<string>;
begin
  tm1 := now;
  edt1.BeginUpdate;
  for i := 0 to 500 do arr[i] := 'ljkhflkjshafljkhaldjkh ' + i.ToString;
  edt1.Items.AddStrings(arr);
  edt1.EndUpdate;
  ShowMessage(IntToStr(i) + ' за ' +IntToStr(MilliSecondsBetween(now,tm1)));



Так работает быстро, а ч-з edt1.Items.Add или edt1.Items.Append ужасно медленно, видимо BeginUpdate /EndUpdate не срабатывает для TComboEdit
...
Рейтинг: 0 / 0
21.05.2021, 11:50
    #40071895
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
antox,

через Assign пробовали? Подготавливали какой-то стринглист, а потом edt1.Items.Assign(стринглист). Или в FMX такого нет?
...
Рейтинг: 0 / 0
21.05.2021, 12:21
    #40071906
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
antox
Код: pascal
1.
edt1.BeginUpdate;


wadman
У списка есть методы блокировки типа BeginUpdate

Я писал про список, а не про контрол.
...
Рейтинг: 0 / 0
21.05.2021, 12:37
    #40071912
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
надо еще понятнее :)

edt1.Items.beginUpdate
...
Рейтинг: 0 / 0
21.05.2021, 13:22
    #40071925
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормоза FMX сравнению с VCL
энди
надо еще понятнее :)

edt1.Items.beginUpdate


Ну теперь-то понятненько :)

А у TCombobox и cbb1.BeginUpdate такой-же результат (15мс), поэтому и применил тоже к контролу, а оно оказывается к списку надо. Спасибо
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тормоза FMX сравнению с VCL / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]