Здесь двоякий вопрос, но я думаю, что эти две темы взаимосвязаны достаточно, чтобы гарантировать их включение вместе.
В нашем В приложении у нас есть ListBox
, который заполнен, возможно, большим количеством элементов. Каждый из этих элементов отображается с помощью довольно сложного шаблона элемента. Это обязательно довольно сложно, и хотя потенциально можно было бы немного урезать, я, вероятно, не смог бы вынести огромную сумму. Элементы в ListBox
поступают из ListCollectionView
, который состоит из ObservableCollection <>
отображаемых объектов.
У нас две проблемы.
Первый заключается в том, что когда мы перенастраиваем фильтры для ListCollectionView
и вызываем для него Refresh
, пользовательский интерфейс блокируется на несколько секунд, пока он отключается. и создается заново, и ListBox
заполняется заново. Продолжительность этой блокировки, по-видимому, связана с количеством элементов, содержащихся в ListBox
, и является наибольшей, когда клиентская область ListBox
заполнена элементами. Мы почти уверены, что блокировка вызвана воссозданием шаблонов элементов. Я пробовал включить виртуализацию,но это не повлияло на снижение или устранение замедления. Я также смотрю на некоторые другие оптимизации, такие как изучение наших привязок и изменение макетов. Есть ли способ избежать этой конкретной проблемы, ускорить ее или перенести в другой поток? (Я знаю, что последний вариант маловероятен, потому что рендеринг является однопоточным, но, возможно, есть какое-то обходное решение ...)
Второй относится к фильтрации в ListCollectionView
. Хотя в настоящее время это не проблема, мы думаем, что фильтрация может стать проблемой и вызвать заметную блокировку потока пользовательского интерфейса. Я работаю над уменьшением накладных расходов на фильтрацию, но мне было интересно, есть ли способ переместить вызов Refresh ListCollectionView
в другой поток? Ни одна из моих попыток до сих пор не увенчалась успехом, по-видимому, потому, что ListCollectionView
не выполняет автоматически маршалинг определенных событий в правильный поток.
Указатели или объяснения любых известных или потенциальных решений этих двух проблем могут быть очень полезным.