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

Вниз

добавление в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
15-1300397390
Юрий
2011-03-18 00:29
2011.07.03
С днем рождения ! 18 марта 2011 пятница


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


1-1258798953
Axtazi
2009-11-21 13:22
2011.07.03
Помогите


2-1301297993
aka
2011-03-28 11:39
2011.07.03
Пазлы


15-1300438782
compuser
2011-03-18 11:59
2011.07.03
Несворачиваемая, дырявая форма





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