У меня есть установка, в которой потенциально тысячи элементов (думают, что 3000 -5000 )будут добавлены к ObservableCollection
, привязанному к некоторому визуальному интерфейсу. В настоящее время процесс их добавления идет довольно медленно (ок. 4 секунды/1000 элементов ), и, конечно же, графический интерфейс не отвечает в течение этого времени. Каков хороший способ справиться с одновременным перемещением такого количества элементов в коллекцию, не беспокоясь о блокировке системы? Я просмотрел DispatcherTimer
, но не уверен, что он предоставит все, что мне нужно.
Другой вопрос -Можно ли как-то ускорить создание этих объектов, чтобы их добавление в коллекцию не занимало так много времени? В настоящее время я использую их вот так:Collection.Add(new Item(
Может ли генерация элементов заранее, в фоновом потоке, уменьшить время, необходимое для их добавления, на заметную величину?
Изменить :Виртуализация невозможна. В требованиях указан внешний вид WrapPanel
, поэтому на самом деле дисплей представляет собой ListBox
с шаблонной панелью ItemsPanel
. Редактировать2 :Согласно секундомеру, узкое место на самом деле помещает предметы в мой ObservableCollection
. Я попытаюсь изменить этот тип коллекции и сделать свое собственное уведомление, чтобы увидеть, существенно ли это ускорит его.
Edit3 :Итак, ответ находится в одном месте -Я решил эту проблему (с помощью снизу ), создав класс, который наследуется от ObservableCollection
. Этот класс сделал две вещи: -представил метод для одновременного добавления коллекций и добавил возможность подавлять CollectionChanged
событие. С этими изменениями время, необходимое для добавления 3000 элементов, составляет примерно 0,4 секунды (97% улучшение ).Эта ссылка описывает реализацию этих изменений.