我有一个设置,其中可能会将数千个项目(想想 3000-5000)添加到ObservableCollection
绑定到某个可视界面的项目中。目前,添加它们的过程非常缓慢(大约 4 秒/1000 个项目),当然 GUI 在此期间没有响应。有什么好方法可以一次将这么多项目移动到一个集合中而不用担心系统锁定?我看过DispatcherTimer
但我不确定它是否能提供我需要的一切。
另一个问题 - 我可以做些什么来加快这些对象的创建,以便将它们添加到集合中不需要很长时间?目前我像这样使用它们:Collection.Add(new Item(<params>))
在后台线程中预先生成项目是否会显着减少添加它们所需的时间?
编辑:虚拟化是不可能的。要求指定WrapPanel
外观,因此显示实际上是ListBox
具有模板化 ItemsPanel 的
Edit2:根据秒表,瓶颈实际上是将物品放入我的ObservableCollection
. 我将尝试更改该集合类型并做我自己的通知,看看是否会大大加快它的速度。
Edit3:所以答案在一个地方 - 我通过创建一个继承自ObservableCollection
. 这个类做了两件事——暴露一个方法来一次添加集合,并添加了抑制CollectionChanged
事件的能力。通过这些更改,添加 3000 个项目所需的时间大约为 0.4 秒(改进了 97%)。此链接详细说明了这些更改的实施。