Добавление огромного количества элементов в Listview - PullRequest
4 голосов
/ 29 июня 2010

У меня есть просмотр списка, который используется как индекс для простого поискового приложения.Каждый элемент индекса является словом, и нажатие на элемент добавит этот элемент в текстовое поле поиска.Пользователь может сначала щелкнуть любое из слов, которые он / она предпочитает, и их в текстовом поле поиска, а затем нажать кнопку поиска, чтобы выполнить поиск в документах.Проблема в том, что добавление более 1000 элементов в ListView занимает много времени!Я разработал индикатор выполнения и добавил таймер, который начинает добавлять элементы в просмотр списка, как только форма загружается.Это дает отзывчивость к приложению, но все же эффективность очень низкая.Я подозреваю, что при увеличении базы документов в индексе может быть около 100 000 слов, поэтому мне нужен более эффективный способ сделать это.Может быть, мне нужно изменить компонент ListView на что-то еще.Это код в таймере для добавления элементов в просмотр списка:

if (!listViewDone)
        {
            int pos = 0;
            ListView listView1 = Search.getInstance().getListView();
            listView1.BeginUpdate();
            for (pos = listViewPos; pos < termf.Count && pos < listViewPos + listViewChunk; ++pos)
            {
                TermFreq t = termf[pos];
                listView1.Items.Add(new ListViewItem(new String[] { t.term }));
                progressBar1.Value = pos;
            }
            listView1.EndUpdate();
            listViewPos = pos;

            if (pos == termf.Count)
            {
                listViewDone = true;
                termf = null;
                timer1.Enabled = false;
                Visible = false;
            }
        }

Ответы [ 4 ]

3 голосов
/ 29 июня 2010

Как уже упоминал hmemcpy, VirtualMode значительно ускорит процесс. Я не уверен насчет коммерческой природы проекта, но я использовал превосходный ObjectListView с открытым исходным кодом, который включает FastObjectListView вариант.

Это в основном расширенный виртуальный ListView, который очень быстр и в качестве дополнительного бонуса гораздо приятнее работать. Документация утверждает, что «может создать список из 10 000 объектов менее чем за 0,1 секунды», и хотя я не могу ручаться за это, когда бы я ни использовал его, я никогда не замечал какого-либо серьезного отставания. Лицензирование может быть проблемой для вас.

2 голосов
/ 29 июня 2010

Если вам нужно отобразить столько элементов в ListView, ваш лучший вариант - использовать ListView Virtual Mode. Таким образом, ваш ListView будет отображать только видимые элементы.

2 голосов
/ 29 июня 2010

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

0 голосов
/ 29 июня 2010

Я проверил список вместо списка и его путь быстрее!Весь процесс занимает менее секунды, что было не менее 30X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...