Эффективное добавление строк в ListView/ListBox
От: neooleg http://www.perspectsoft.com
Дата: 16.09.06 08:12
Оценка:
Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов. При добавлении стандартными средствами (SendMessage(hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)array[i])) время оказывается 1-2 с на Athlon 2800+. Подскажите, пожалуйста, каким образом можно при помощи какой-либо функции, за не более 1-100 ее вызовов, добавить весь массив. Заранее благодарен.

21.09.06 20:31: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Эффективное добавление строк в ListView/ListBox
От: Greg Zubankov СССР  
Дата: 16.09.06 08:26
Оценка:
Здравствуйте, neooleg, Вы писали:

N>Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов. При добавлении стандартными средствами (SendMessage(hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)array[i])) время оказывается 1-2 с на Athlon 2800+. Подскажите, пожалуйста, каким образом можно при помощи какой-либо функции, за не более 1-100 ее вызовов, добавить весь массив. Заранее благодарен.


Можно вообще не добавлять. Воспользуйся стилем LVS_OWNERDATA (ListView).
Re: Эффективное добавление строк в ListView/ListBox
От: Aera Беларусь  
Дата: 18.09.06 06:39
Оценка:
Здравствуйте, neooleg, Вы писали:

N>Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов. При добавлении стандартными средствами (SendMessage(hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)array[i])) время оказывается 1-2 с на Athlon 2800+. Подскажите, пожалуйста, каким образом можно при помощи какой-либо функции, за не более 1-100 ее вызовов, добавить весь массив. Заранее благодарен.


Не помню точно, подходит ли это для ListView, но где-то удавалось достичь повышения скорости добавления при скрывании окна перед добавлением элементов

listctrl_.ShowWindow(SW_HIDE);

// adding new items

listctrl_.ShowWindow(SW_SHOW);
--
RedApe
Re: Эффективное добавление строк в ListView/ListBox
От: Sergey Россия  
Дата: 18.09.06 10:00
Оценка:
> Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов. При добавлении стандартными средствами (SendMessage(hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)array[i])) время оказывается 1-2 с на Athlon 2800+. Подскажите, пожалуйста, каким образом можно при помощи какой-либо функции, за не более 1-100 ее вызовов, добавить весь массив. Заранее благодарен.

Насколько я помню, в ListView унутре обычный single-linked list. Поэтому если есть проблема с тормозами и заполнять надо лист целиком, то добавлять строки надо не в хвост, а в голову (в обратном порядке).
Posted via RSDN NNTP Server 2.0
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Эффективное добавление строк в ListView/ListBox
От: SexMachine Украина www.is.svitonline.com/sashko1
Дата: 20.09.06 11:03
Оценка: 2 (1)
Здравствуйте, neooleg, Вы писали:

Соглашусь со всеми товарищами — каждый предложенный метод даст прирост производительности. Единственное что для лист контрола имеет смысл не скрывать окно, а воспользоваться специальным методом — LockWindowUpdate/UnLockWindowUpdate.

Оптимальным для 51 тысячи строк будет решение со стилем LVS_OWNERDATA. — в этом случае "добавление" (которого на самом деле нет) происходит мгновенно, и от кол-ва строк вообще не зависит.
У кого-то варит голова, у кого-то — желудок...
Re: Эффективное добавление строк в ListView/ListBox
От: Аноним  
Дата: 21.09.06 11:27
Оценка:
N>Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов.

Фигасе! А зачем так быстро? Думаешь кто-нибудь успеет прочитать 51000 строк на пол-секунды?
Re: Эффективное добавление строк в ListView/ListBox
От: LuciferMoscow Россия  
Дата: 21.09.06 12:00
Оценка:
Здравствуйте, neooleg, Вы писали:
http://rsdn.ru/article/controls/virtlist.xml
Автор(ы): Тимофей Чадов
Дата: 10.09.2001
Re: Эффективное добавление строк в ListView/ListBox
От: ndemia Россия http://ndemia.com
Дата: 22.09.06 19:56
Оценка:
Здравствуйте, neooleg, Вы писали:

N>Здравствуйте, у меня следующая проблема: мне необходимо в контролы ListBox или ListView (не принципиально), осуществить быстрое (до 500 мс) добавление двумерного массива строк: всего 51000 строк, каждая 10-20 символов. При добавлении стандартными средствами (SendMessage(hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)array[i])) время оказывается 1-2 с на Athlon 2800+. Подскажите, пожалуйста, каким образом можно при помощи какой-либо функции, за не более 1-100 ее вызовов, добавить весь массив. Заранее благодарен.



ListBox: LB_SETCOUNT
ListView: LVM_SETITEMCOUNT
Re: Эффективное добавление строк в ListView/ListBox
От: neooleg http://www.perspectsoft.com
Дата: 11.04.07 04:49
Оценка:
Спасибо большое всем за помощь, я уже одолел эту проблему благодаря статьи о виртуальном ListView на данном сайте.
З.Ы. Извените, за тормоза с ответом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.