C# WPF 刷新列表视图,其中有很多项挂起



我有某种使用列表视图的文件资源管理器来显示文件。当我打开包含数千个文件的文件夹时,UI 在 ListView 刷新时挂起大约 5 秒。

有什么办法可以避免这种情况吗?

谢谢

虚拟化对于此类大型集合是必须的。如果没有它,WPF 将不得不提前为列表中的每个项创建一个可视化树。

只是一种预感,但是您是否使用可观察集合将文件集合绑定到ListBox?

我在大型集合和 ObservableCollection 时遇到了性能问题。您只能在 UI 线程上添加/删除项目 - 如果您循环访问文件结果并将它们添加到可观察集合中,那么您会遇到这种滞后。

在这种情况下,最好的解决方案是将文件列表编译为单独的列表,并创建一个新的 ObservableCollection,通过构造函数传递列表。这样可以最大程度地减少对 UI 线程的命中。

项目添加到列表视图的数据源中,并将"调度程序优先级"设置为"背景"。

Application.Current.Dispatcher.BeginInvoke(
    DispatcherPriority.Background,
    new Action(() => AddNewITemToList(newItem));

您现在遇到的性能问题与以下事实有关:控件为所有找到的所有数千个文件创建 UI 元素,即使只呈现其中的一小部分。

至少需要使用 ListView.VirtualMode 在控件中实现分页类型。

在实践中,在此模式下,控件的ListViewItem是动态创建的,因此您可以使用其中ItemsCollection,但您可以在单个时刻控制UI所需的每个项目的创建,因此也可以提高性能。

还有一个数据虚拟化选项,其中绑定到控件的数据也会虚拟化,而不仅仅是控件UI

最新更新