频繁插入已排序的集合

时间:2010-07-20 14:45:59

标签: c# .net performance collections

我已经对集合(List)进行了排序,我需要始终对其进行排序。

我目前正在我的集合中使用List.BinarySearch,然后在正确的位置插入元素。我在每次插入后都尝试过排序列表但性能不可接受。

是否有可以提供更好性能的解决方案?也许我应该使用其他收藏品。

(我知道SortedList,但它仅限于唯一键)

3 个答案:

答案 0 :(得分:3)

如果您使用的是.Net 4,则可以使用SortedSet<T>

http://msdn.microsoft.com/en-us/library/dd412070.aspx

对于.Net 3.5及更低版本,请查看SortedList<TKey,TValue>是否适合您。

http://msdn.microsoft.com/en-us/library/ms132319.aspx

答案 1 :(得分:3)

PowerCollectionsOrderedBag类型,可能对您需要的内容有用。来自文档

  

插入,删除和查找   所有元素都在 log(N)+ M中完成   时间,其中N是键的数量   树,M是当前的数字   正在复制的元素   处理。

但是,对于.NET 3.5内置类型,使用List.BinarySearch并将每个项目插入正确的位置是一个好的开始 - 但是在内部使用数组,因此您的性能会因为所有复制而降低插入时正在做。

如果您可以将插件分组,这样可以改善操作,但除非您在插入完成后只进行一次排序操作,否则最好使用OrderedBag中的PowerCollections如果可以的话。

答案 2 :(得分:1)

尝试将插入聚合为批次,并仅在每批次结束时进行排序。