在对应用程序进行概要分析后,我发现清除ICollectionView
的{{1}}或GroupDescriptions
集合非常昂贵,我不明白为什么会这样。清理似乎比应用组或排序描述更耗时更有意义。
为了进一步调查,我使用了一个秒表,发现对于1000个项目,清除组描述需要大约300毫秒,而添加新的组描述需要大约30毫秒。我还试图在替换组描述时推迟刷新视图(即删除旧的,添加一个新的),但这并没有改变任何东西。单独的添加/删除调用立即返回,但刷新的时间与延期一样长。
我还观察到,如果没有激活组描述,排序就会按预期运行,即每个清除和排序都是几毫秒,清除速度明显更快。应用组描述后,清除排序描述(~1000ms)所需的时间是应用新描述(~300ms)的三倍。除了总体来说表现糟糕之外,我只是没有看到复杂性在这里爆发的地方,尤其是清算。
所以,如果有人能向我解释这种行为,我将非常感激。另外,如果你知道如何加快速度,请分享。
答案 0 :(得分:1)
正如pindumb在评论中所指出的,性能下降源于分组,默认情况下禁用虚拟化(即,默认情况下启用虚拟化,但在对数据进行分组后丢弃)。只需将VirtualizingPanel.IsVirtualizingWhenGrouping="True"
[msdn](自.NET 4.5以来可用)添加到例如显示数据和性能的ListBox按预期运行。