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