Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.11;
Скачать: CL | DM;

Вниз

Тормоза в ListView   Найти похожие ветки 

 
ghost_by ©   (2002-03-22 21:08) [0]

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


 
kull ©   (2002-03-23 01:23) [1]

попробуй


ListView.BeginUpdate;

//заполнение

ListView.EndUpdate;


а лучше так:


ListView.BeginUpdate;
try
//заполнение
finally
ListView.EndUpdate;
end;




 
kull ©   (2002-03-23 01:26) [2]

немного промахнулся, вот:


ListView.Items.BeginUpdate;
try
//заполнение
finally
ListView.Items.EndUpdate;
end;



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

OK!


 
cypher ©   (2002-03-24 22:11) [4]

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


 
Fay ©   (2002-03-25 13:16) [5]

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


 
ghost_by ©   (2002-03-27 07:46) [6]

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

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

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



 
Arhelon ©   (2002-03-27 08:05) [7]

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


 
Alx2 ©   (2002-03-27 08:09) [8]

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


 
y-soft ©   (2002-03-27 08:32) [9]

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


 
Eug201 ©   (2002-03-27 08:54) [10]

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


 
ghost_by ©   (2002-03-27 21:46) [11]

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

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

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



 
Malder ©   (2002-03-27 21:54) [12]

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


 
ghost_by ©   (2002-03-27 22:03) [13]

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

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


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


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

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

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

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

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


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


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

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


 
Eug201 ©   (2002-03-28 06:46) [16]

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


 
Eug201 ©   (2002-03-28 06:52) [17]

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


 
ghost_by ©   (2002-03-28 13:52) [18]

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

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


 
ghost_by ©   (2002-03-28 21:39) [19]

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


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


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


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

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


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


> ghost_by ©

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

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

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


 
ghost_by ©   (2002-03-29 07:26) [22]

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

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



Страницы: 1 вся ветка

Текущий архив: 2002.04.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.011 c
3-32647
SZap
2002-03-16 13:41
2002.04.11
TQuery.SQL


1-32824
snoup
2002-03-27 19:18
2002.04.11
Как с помощью компонента TDialUp сделать автодозвон? Я пишу так:


1-32769
новенький в Делфи
2002-03-30 14:17
2002.04.11
Обработчик событий


14-32962
Salmir
2002-03-04 04:13
2002.04.11
Помогите новичку


4-33025
Aleksey1
2002-01-31 01:16
2002.04.11
win api