Ускорение работы с listbox, combobox, memo ...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Подтверждаю. Из десяти тысяч видно 2 тыщи, из пяти - одна, + зависает на десяток секунд.
Тот же код на гтк2 выполняется мгновенно и видно все строки.
AMD
постоялец
Сообщения: 189
Зарегистрирован: 23.01.2008 21:25:25
Откуда: Кишинев

Сообщение AMD »

Attid писал(а):да говорят же бага еще под вендой проверю и запостю.

кто нибуть под линем еще может подтвердить? по поводу того что не все под гтк1 отображается ? например на 5000 записей вижу только на тысячу с конца.
а на 3000 в листе только 20 записей.

Проверю на днях

А так сделал текстовый редактор с мемо
загрузка 16MByte file загружается за 12сек в Windows и за 7сек в linux
принцып загрузки линий как у листбокса так что незнаю

и кстати в линуксе мемо с таким обьемом даных работает намного шустрее

в винде если нахожусь в верхней части (строка 100 - 500 к примеру) вставка новой строки гдето 1сек - 1.5сек - в линуксе моментально 0.1сек

в конце мемо под виндовс тоже быстро уже

Под линукс использую GTK2
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Список заполняю 5000 элементов.
GTK1:
ListBox тормозит, Вставляется порядка 1000 записей - на экране видны записи с 4000 по 5000.
BeginUpdate/EndUpdate практически ничего не влияет.
Время вставки порядка 10 секунд.

ComboBox также не отображает все записи, тоже только последних 1000. С BeginUpdate/EndUpdate время вставки порядка 1 сек, без - порядка 3 секунд.

GTK2:
ListBox работает мгновенно, причём BeginUpdate/EndUpdate практически ничего не влияет, просто во случчае отсутсвия объвязки BeginUpdate/EndUpdate после заполнения списка видно масштабирование полосы скролинга.

ComboBox не расчитна видно на такие объёмы, причём скорее всего это даже не Lazarus виноват - впечатление что тормозит сам контрол.
С BeginUpdate/EndUpdate заполнение контрола происходило около 30 секунд, без - 1,5 минуты.
Работать с таким список просто не реально - неудобно, и есть артифакты отрисовки.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

отправил 10894

про комбик не говорил, думаю они связаны

UPD: подумал и добавил коментарием =)
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

С BeginUpdate/EndUpdate заполнение контрола происходило около 30 секунд, без - 1,5 минуты.

Нихрена себе GTK2 дает! Несчастные 5000 элементов.
Это на каком оборудовании ?
Аватара пользователя
Maxx_ir
новенький
Сообщения: 12
Зарегистрирован: 24.02.2008 19:52:00
Откуда: Тольятти
Контактная информация:

Сообщение Maxx_ir »

Вопрос закрыт, заюзал TMemdataset :)
Кусок кода:
>>
var
_list: TStringList;
i: integer;
begin
Datasource1.DataSet := nil;
with MemDataset1.FieldDefs do begin
Add('Employee', ftString, 80, True);
end;
MemDataset1.CreateTable;
MemDataset1.Open;
_List := TStringList.Create;
_List.LoadFromFile('some.txt');
for i := 0 to (_List.Count - 1) do
begin
MemDataset1.Insert;
MemDataset1.Fields[0].AsString:= _List.Strings[i];
MemDataset1.Post;
end;
_List.Free;
Datasource1.DataSet := MemDataset1;
// Далее работаем с DbGrid, DbListBox etc.
end;

>>
Работает под GTK1 моментально.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

debi12345
GTK2 из состава ASPLinux 11.2, железо: AMD Atlon 1600
в GTK2 вобще некоторые вещи медленно работаю - в частности TextOut.
Maxx_ir
Это наиболее правильное решение. Ещё быстрее будет если, ты создаш постоянные поля и обращзаться к ним будеш MemDataset1Employee.AsString:='bla-bla-bla'
Ответить