提高影响集合中所有项目的 INotifyPropertyChanged 的​​性能

Improving performance of INotifyPropertyChanged affecting all items in a collection

我有一个 ObservableCollection 用作 Xamarin Forms DataGridItemsSource。集合中的每个视图模型都有一个可观察的 IsSelected 属性,绑定到数据网格的行模板中的 Switch。此数据网格中最多可以有 ~20k 行。

有按钮“Select All”和“Select None”,它们的作用与您期望的一样:它们将此 属性 设置为适当的集合中每个元素 的值。对于大型集合,这需要几秒钟才能完成,原因是处理所有这些 属性 更改通知以保持 UI 同步。

有没有办法批量处理这些更改通知,或者暂停它们并更新 UI 老式的方式,或者做一些其他的事情来提高性能?我在 batching PropertyChanged notifications 中看到的技术涉及将多个更改合并到同一对象上的同一 属性,这不是我遇到的问题。

选项 1:

如果我们需要加载大量项目,我们总是使用分页。在您的情况下,您可以在我们将它们添加到 ItemsSource 之前更新接下来的十个或更多项目 IsSelected

选项 2:

您一次可以 运行 多个方法。这样您就可以在多种方法中更新 IsSelected 的值(在每个方法中您可以更新 1000 个或更多项)

// this process run synchronously.
Task.Run(() =>
{
// call your methods
MyFunction1(); // update 1-1000
MyFunction2(); // update 1001-2000 
});
// this process doesn't wait for function execution,it will run Asynchronous way.use this if you dont want to use function return value;
Task.Factory.StartNew(MyFunction1);
Task.Factory.StartNew(MyFunction2);

这两个过程都可以帮助您实现非阻塞 UI。