【问题标题】:Is sorting using CollectionView performance efficient?使用 CollectionView 进行排序是否高效?
【发布时间】:2023-01-12 23:59:37
【问题描述】:

我有一个 ICollectionView 作为 WPF ListView 的输入源。 CollectionView 中的项目(短信)数量可能高达 10,000。我想根据时间戳向集合视图添加一个排序规则。最新添加的消息应该在最上面。

MyCollectionView.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending));

问题:如果我使用上述排序标准,是否每次添加新消息时都会进行排序?还是 CollectionView 在内部和我的场景中维护一个排序列表(即,将时间戳作为排序),它只需要将新传入消息的时间戳与最后添加的消息的时间戳进行比较?

【问题讨论】:

  • 你没有尝试过它的行为吗?你的实际问题是什么?
  • @Clemens:我的实际问题是我不知道它是如何实现的。对于数量有限的项目(尝试 5-10 个),它对我来说很好用。但我不知道如果我有数千/数百万件物品,它会如何反应。即使在我的情况下,它可以维护一个排序列表,每次添加新项目时是否需要进行完整排序?
  • “'我不知道如果我有一千个物品它会如何反应" - 然后编写一个创建几千个项目的测试程序。问题到底出在哪里?我们无法判断某个解决方案是否适合您。您必须自己判断。
  • @Clemens:问题是我想知道它是如何实现/工作的,但我找不到答案。尝试了解它是不是很糟糕?
  • 它比 linq 慢。但是您永远不应该向 UI 呈现数千个项目。始终过滤。考虑最多 200 个左右。那么,如果您的 collectionview 排序速度慢并不重要,用户将不必慢慢滚动浏览大量数据。

标签: c# wpf uicollectionview collectionview collectionviewsource


【解决方案1】:

您最好不要依赖 collectionview 排序,也不要将 10,000 个项目呈现给列表视图。

答案:

默认情况下,当您使用 CollectionView(Source) 在 itemscontrol 中进行排序、分组和过滤时,排序/分组/过滤行为将在您显式刷新 CollectionView 或

当您向集合中添加或删除项目时.

因此,您不应该对集合进行排序。我认为您最好的选择可能是插入未排序的可观察集合的零位置。

如果您快速插入大量项目,那么它仍然会消耗循环。这些在您的 UI 线程上,因此您最好不要让任何人尝试与您的 UI 交互。如果这些消息传入的速度足够快,您无论如何都会模糊不清。

我认为您应该只在“实时”视图中向用户显示最新的几条消息。不要让他们排序。

如果他们需要查看 10,000,则将其放在另一个向他们显示静态快照的视图中。看看你的表现是什么样的,当你有具体的东西可以玩的时候考虑迭代。

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2019-09-26
    相关资源
    最近更新 更多