Форум: "Основная";
Текущий архив: 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.01 c