什么是更快:对它进行排序的集合或列表和linq查询(密集插入/删除)?

时间:2011-07-27 09:37:41

标签: c# performance

我陷入两难境地。我必须实现优先级排队(自定义排序顺序)。我需要每秒插入/处理/删除大量消息(~100-1000)。

哪种设计在运行时更快?

1)按优先级集合(列表)自定义排序

2)列表(非排序集合)+ linq查询所有时间我需要处理(出列)消息

3)别的东西

增加:

SOLUTION:

按优先级列出(字典)队列:SortedList<int, VPair<bool, Queue<MyMessage>>> 其中int - priority,bool - 如果它不是空队列,则为true

4 个答案:

答案 0 :(得分:2)

您的读/写比率是多少?是否涉及多个线程,如果是,如何?

一如既往地在询问性能时,请对代码路径进行基准测试,并亲自查看(特别是您的问题域越具体)。

答案 1 :(得分:2)

唯一可以确定的方法是衡量自己的表现。

答案 2 :(得分:1)

好吧,在未排序的数据结构中查找元素平均需要O(n)(一次通过数据结构)。二进制搜索树在O(log n)上具有平均插入复杂度,并且平均查找复杂度为O(log n)。因此理论上使用类似的东西会更快。实际上,数据的开销或形状可能会破坏理论上的优势。

此外,如果您的自定义排序顺序可以在运行时更改,则可能必须重建已排序的数据结构,这是额外的性能损失。

最后:如果它对您的应用程序很重要,那么尝试不同的方法并自己进行基准测试 - 这是确定它有效的唯一方法。

答案 3 :(得分:0)

据我所知,引入排序总会产生插入性能开销。如果不需要排序,那么使用一个很好的通用词典,它将根据你的唯一键提供快速查找。