我陷入两难境地。我必须实现优先级排队(自定义排序顺序)。我需要每秒插入/处理/删除大量消息(~100-1000)。
哪种设计在运行时更快?
1)按优先级集合(列表)自定义排序
2)列表(非排序集合)+ linq查询所有时间我需要处理(出列)消息
3)别的东西
增加:
SOLUTION:
按优先级列出(字典)队列:SortedList<int, VPair<bool, Queue<MyMessage>>>
其中int - priority,bool - 如果它不是空队列,则为true
答案 0 :(得分:2)
您的读/写比率是多少?是否涉及多个线程,如果是,如何?
一如既往地在询问性能时,请对代码路径进行基准测试,并亲自查看(特别是您的问题域越具体)。
答案 1 :(得分:2)
唯一可以确定的方法是衡量自己的表现。
答案 2 :(得分:1)
好吧,在未排序的数据结构中查找元素平均需要O(n)(一次通过数据结构)。二进制搜索树在O(log n)上具有平均插入复杂度,并且平均查找复杂度为O(log n)。因此理论上使用类似的东西会更快。实际上,数据的开销或形状可能会破坏理论上的优势。
此外,如果您的自定义排序顺序可以在运行时更改,则可能必须重建已排序的数据结构,这是额外的性能损失。
最后:如果它对您的应用程序很重要,那么尝试不同的方法并自己进行基准测试 - 这是确定它有效的唯一方法。
答案 3 :(得分:0)
据我所知,引入排序总会产生插入性能开销。如果不需要排序,那么使用一个很好的通用词典,它将根据你的唯一键提供快速查找。