Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тормоза в ListView [D5]


Страницы:   1 2

ghost_by ©   (2002-03-22 21:08:00) 

ListView тормозит при добавлении/удалении большого (<100) количества строк... Добавление/удаление выполняется достаточночасто и тормоза раздражают. Как от этого избавиться? Или может я чего неправильно делаю?


ghost_by   (2002-03-29 07:26:00) [1]

В какую сторону сравнение? Лучше, хуже?- на порядок быстрее. Добился того, что мне нужно было.

Как я раньше говорил, для больших объемом данных в СУБД, ListView/TreeView не лучший вариант- я не с СУБД работаю. Все данные находятся в файле и достаточно быстро считываются. Я проверял - загрузка данных не являлась тормозом.


RageSV   (2002-03-28 22:50:00) [2]


> ghost_by ©

Вспомнил. Вроде с Delphi есть пример использования ListView с виртуальной подкачкой. Попробуй запустить этот пример на большом массиве данных.
И все же, это зависит от задачи (блока, где ты эти данные подгружаешь). Возможно, у тебя не оптимизирован именно этот блок.
Как я раньше говорил, для больших объемом данных в СУБД, ListView/TreeView не лучший вариант (ни в VCL, ни в MFC, (и даже ни VirtualTreeView)). В данном случае, как правило, приходится их затачивать под конкретную задачу.
Например, цикл

while not что-то.EOF do
begin
записать в ListView/TreView
что-то.Next()
end

на больших объемах данных не прокатит.


RageSV   (2002-03-28 22:33:00) [3]


> Спасибо - разобрался, скорость между прочим ни в какое сравнение
> не идет по сравнению с предыдущим результатом.

В какую сторону сравнение? Лучше, хуже?


ghost_by   (2002-03-28 21:39:00) [4]

В данном случае, не надо изобретать колесо. Оно уже изобретено.
Смотрите события:
OnData
OnDataFind
OnDataHint (если конечно надо)
OnDataStateChange


Спасибо - разобрался, скорость между прочим ни в какое сравнение не идет по сравнению с предыдущим результатом.


ghost_by   (2002-03-28 13:52:00) [5]

А может руки плохо реализованы ?- а ты не смотрел? Там изначально - виртуальный ListView.

Из VirtualTreeView очень легко сделать ListView.- посмотрю.


Eug201   (2002-03-28 06:52:00) [6]

Поразбирайся с VirtualTreeView - действительно стоящая вещь - если что пиши на eug201_собака_mail.ru


Eug201   (2002-03-28 06:46:00) [7]

Из VirtualTreeView очень легко сделать ListView.


RageSV   (2002-03-27 22:16:00) [8]


> Создается впечатление, что в VCL плохая реализация ListView,
> так как на днях смотрел пример с ListView на Visual C++
> (MFC) - абсолютно никаких тормозов.

Ню-ню.
А может руки плохо реализованы ?


RageSV   (2002-03-27 22:13:00) [9]


> Насчет виртуального режима ListView - подозреваю, что придется
> писать свой компанент.

В данном случае, не надо изобретать колесо. Оно уже изобретено.
Смотрите события:
OnData
OnDataFind
OnDataHint (если конечно надо)
OnDataStateChange

Далее. Методы BeginUpdate, EndUpdate - обязательны.

Удалять приаттаченые к итемам об`екты только через событие OnDeletion. И ни как через рекурсию при разрушении ListView/TreeView (см. исходники и все станет понятно).

Работает при добавлении 1000 записей в момент на очень слабых машинах. Если добавляются записи из СУБД - это другая песня. В противном случае, нужно смотреть твой код.


ghost_by   (2002-03-27 22:03:00) [10]

В смысле ListView1.Items.Clear;
5 секунд? Попробуй сделай пример и заполни ListView около 1000 Itemов на 250-300 Мгц, а потом удали их (очисли ListView) и ты поймешь как ты ошибался.

Создается впечатление, что в VCL плохая реализация ListView, так как на днях смотрел пример с ListView на Visual C++ (MFC) - абсолютно никаких тормозов.


Malder   (2002-03-27 21:54:00) [11]

очищается весь ListView это в смысле listview1.clear ? Так это вообще моментально.
А насчет скорости - помню на 250-300 Мгц лимит listview (около 32000 записей) заполнялся за 5 секунд...


ghost_by   (2002-03-27 21:46:00) [12]

На http://www.lischke-online.de/ только TreeView, ListView я не нашел, или он вместе с TreeView в одном архиве.

Насчет виртуального режима ListView - подозреваю, что придется писать свой компанент.

Насчет Сейчас Random намусорил в ListView 100 itemов по 10 разкагда добавляются новые строки - согласен, но когда очищается весь ListView - тормозит. Попробуй чуть больше itemов - 200 скажем. В принципе - если корыто боле-менее быстрое - тормозов не заметно, но если корыто 200Mhz или что-то около того - ТОРМОЗ.


Eug201   (2002-03-27 08:54:00) [13]

Я уже давно отказался от стандартного ListView и очень доволен: http://www.lischke-online.de/отличные бесплатные компоненты. А скорость VirtualTreeView действительно неплохая.


y-soft   (2002-03-27 08:32:00) [14]

Почитайте о виртуальном режиме работы с ListView в MSDN
При больших объемах очень помогает


Alx2   (2002-03-27 08:09:00) [15]

Сейчас Random намусорил в ListView 100 itemов по 10 раз (очистка - снова заполнение) - пролетело ветром :).
Видимо, надо копать в коде. Кстати, можно на него взглянуть?


Arhelon   (2002-03-27 08:05:00) [16]

Проверь есть ли какие события у lv на разного рода Change
События OnChange и OnChanging (точность написания не гарантирую)
Вызываются по поводу и бес повода и ежли там что-то есть то соответственно обработчики выполняются. Это и торомозит процес обновления. Если оно есть то ставь там проверку на процес обновления.
lv и tv работают быстро ежли грамотно написаны по крайней мере порядка 1000 итемсов просто летает.


ghost_by   (2002-03-27 07:46:00) [17]

Приблизительно следующего плана задача: Есть TreeView, и есть ListView. При смене узла в TreeView - изменяется содержимое ListView. Без BeginUpdate и EndUpdate на более тормозных корытах видно как удаляются и добавляются строки. Создается впечатление, что ListView обновляется после изменения, удаления или добавления.

После добавления BeginUpdate и EndUpdate время на удаление и добавление затрачивается такое же,но теперь нет никаких миганий.

Все равно тормозит! Что делать?


Fay   (2002-03-25 13:16:00) [18]

2cypher
>врядли поможет
Проверь


cypher   (2002-03-24 22:11:00) [19]

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


ghost_by   (2002-03-24 21:20:00) [20]

OK!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо