Итак, у меня есть ListView с верхним пределом около 1000 элементов. Мне нужно иметь возможность фильтровать эти элементы, используя событие TextChanged текстового поля. У меня есть код, который хорошо работает для меньшего количества элементов (~ 400), но когда мне нужно повторно отобразить полный список из 1000 предметов, это занимает около 4 секунд.Как эффективно фильтровать большой LIstViewItemCollection?
Я не создаю новые элементы ListViewItems каждый раз. Вместо этого я сохраняю список полной коллекции предметов, а затем добавляю из нее. Кажется, что метод .Add занимает много времени. Вот немного пример:
this.BeginUpdate();
foreach (ListViewItem item in m_cachedItems)
{
MyListView.Add(item);
}
this.EndUpdate;
Я пробовал только добавив недостающие элементы (то есть, разница между отображаемыми элементами в настоящее время и в общем списке элементов), но это не работает. Может быть ситуация, когда в настоящее время отображается только один элемент, пользователь очищает текстовое поле, и мне нужно отобразить весь список.
Я не очень опытен в производительности eecing из элементов управления .NET с большим примером, подобным этому, поэтому я действительно не знаю, как лучше это сделать. Есть ли способ использования метода .Add(), или если нет, просто лучшее общее решение?
Это даст лучшую производительность, но может быть намного больше работы. Я подозреваю, что список из нескольких сотен, проще всего отключить сортировку, пока список изменен. – 2008-10-04 01:56:28
Я бы не стал больше работать - просто больше работы. Несомненно, примеры Microsoft делают это очень похожим, но они всегда смешны. :-) – 2008-10-04 02:01:45