Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];

Вниз

Тормоза в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
1-32870
QWest
2002-03-29 09:45
2002.04.11
Помогите други!!!!!!!!!1


7-32996
Сергей Чурсин
2002-01-16 16:02
2002.04.11
Как убрать записи о неверных P&P устройствах ?


3-32620
BigError
2002-03-22 13:23
2002.04.11
Определение количества записей в физической таблице, несмотря на фильтрацию


1-32782
Biorobot
2002-03-31 15:59
2002.04.11
Ещё разок спрошу!


1-32849
Deus
2002-03-28 19:03
2002.04.11
StayOnTop





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский