什么更快:排序的集合或列表和linq查询(密集的插入/删除)
本文关键字:查询 插入 删除 linq 排序 集合 列表 什么 | 更新日期: 2023-09-27 18:03:54
我进退两难。我必须实现优先队列(自定义排序顺序)。我需要通过使用它每秒插入/处理/删除大量消息(~100-1000)。
哪个设计在运行时更快?
1)自定义排序的优先级集合(list)
2) list(non-sorted collection) + linq query所有时间当我需要处理(dequeue)消息
补充道:
解决方案:
按优先级排序的队列列表(字典):SortedList<int, VPair<bool, Queue<MyMessage>>>
其中int - priority,如果不是空队列
你的读/写比率是多少?是否涉及多个线程,如果是,如何涉及?
与往常一样,在询问性能时,对两个代码路径进行基准测试并亲自查看(问题领域越具体,尤其如此)。
唯一确定的方法是亲自测量性能。
在未排序的数据结构中查找元素平均需要O(n)(遍历数据结构一次)。二叉搜索树的平均插入复杂度为O(log n)平均查找复杂度为O(log n)所以理论上使用这样的方法会更快。实际上,开销或数据的形状可能会扼杀理论上的优势。
如果你的自定义排序顺序可以在运行时改变,你可能不得不重建排序的数据结构,这是一个额外的性能打击。
最后:如果它对您的应用程序很重要,那么尝试不同的方法并自己对其进行基准测试-这是确保它有效的唯一方法。
据我所知,引入排序总是会导致插入性能开销。如果不需要排序,那么使用一个好的通用字典,它将根据您的唯一键提供快速查找。