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

Вниз

добавление в TListView больших объемов инфы   Найти похожие ветки 

 
m_kostik   (2011-03-13 23:20) [0]

Здравствуйте, уважаемые коллеги!
У меня проблема с TListView (режим vsReport). Мне нужно добавить в

него большое количество Item"ов (порядка 80 тысяч). В Item"е 4

Subitem. Делаю примерно так:
var
 i: integer;
 li: TListItem;
begin
 for i := 0 to 80000 do
   begin
     li := ListView1.Items.Add();
     li.Caption := str1;
     li.SubItems.Add(str2);
     li.SubItems.Add(str3);
     li.SubItems.Add(str4);
   end;
end;
Беда в том, что на машине средней паршивости этот код выполняется

примерно за 15..20 минут, что не допустимо. Проблема именно в

заполнении ListView - все остальное работает быстро. Есть ли

какой-нибудь способ поднять производительность?


 
DimaBr ©   (2011-03-14 11:26) [1]

Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


 
Anatoly Podgoretsky ©   (2011-03-14 11:33) [2]

А пользователю что вешаться из-за таких объемов, он же тормозить не умеет.


 
DimaBr ©   (2011-03-14 11:34) [3]

Пускай пользователь вчитывается, вдруг в 73652 элементе найдёт ошибку


 
CrytoGen   (2011-03-14 11:37) [4]

VirtualTree посмотрите


 
RWolf ©   (2011-03-14 11:38) [5]


> Есть ли какой-нибудь способ поднять производительность?

для начала элементарно обернуть код в Items.BeginUpdate / EndUpdate.
но над [2] и [3] стоит задуматься.


 
m_kostik   (2011-03-14 19:23) [6]


> для начала элементарно обернуть код в Items.BeginUpdate
> / EndUpdate

Этот фокус, к сожалению, не работает


 
m_kostik   (2011-03-14 19:25) [7]

Нашел отличную статью по этой проблеме: http://www.delphi.int.ru/articles/38/
Суть в том, что при работе с большими объемами инфы нужно устанавливать ListView.OwnerData в true, затем присвоить ListView.Count сколько нужно (в моем случае 80000) и создать обработчик события OnData, в котором будет заполняться каждый конкретный Item (с Subitem"ами). Событие OnData возникает только тогда, когда нужно вывести соответствующий Item в видимую область ListView. Естественно, что при большом количестве Item"ов скорость увеличивается на порядки.
Всем большое спасибо! :-)))


 
_Юрий   (2011-03-14 19:37) [8]


> Всем большое спасибо! :-)))
>


Завсегда рады помочь. Обращайтесь


 
DiamondShark ©   (2011-03-15 12:43) [9]


> большое количество Item"ов (порядка 80 тысяч).

Ни один нормальный пользователь не сможет прочитать 80 тысяч элементов.


 
han_malign   (2011-03-15 17:19) [10]


> Ни один нормальный пользователь не сможет прочитать 80 тысяч элементов.

- в сортированном списке - найти коллизии и проследить динамику по "ASCII-узору" - легко...


 
han_malign   (2011-03-15 17:33) [11]

На самом деле все банальней - некоторым пользователям - проще выдать все, чем каждый раз объяснять, что он "не сможет прочитать 80 тысяч элементов", поэтому включена фильтрация по умолчанию - и что события за предыдущий квартал не потеряны, а просто нужно настроить фильтр...



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

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

Наверх




Память: 0.47 MB
Время: 0.004 c
15-1299878994
Юрий
2011-03-12 00:29
2011.07.03
С днем рождения ! 12 марта 2011 суббота


15-1300699590
CRLF
2011-03-21 12:26
2011.07.03
Unicode, есть ли символ?


8-1213428249
Настя
2008-06-14 11:24
2011.07.03
Необходимо обработать исключительную ситуацию


15-1300257468
Артём
2011-03-16 09:37
2011.07.03
Cистема на работе барохлит?


1-1257430353
igor666
2009-11-05 17:12
2011.07.03
Не модальная форма из DLL, не обрабатываются некоторые события.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский