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