这可能是此question的副本,它询问“SortedListSortedDictionary有什么区别?”不幸的是,答案只不过是引用了MSDN文档(该文档明确指出了两者之间在性能和内存使用上的差异),但实际上并没有回答问题。

根据MSDN,实际上(因此这个问题不会得到相同的答案):



因此,很明显,这表明SortedList<TKey, TValue>的更好选择,除非,您需要更快地对未排序的数据进行插入和删除操作。

鉴于上述信息,仍然存在问题,使用SortedDictionary<TKey, TValue>的实际(实际情况,业务案例等)原因是什么?根据性能信息,这意味着实际上根本不需要SortedDictionary<TKey, TValue>

最佳答案

我不确定MSDN文档在SortedListSortedDictionary上的准确性如何。看来这两者都是使用二叉搜索树实现的。但是,如果SortedList使用二进制搜索树,为什么添加时它比SortedDictionary慢得多?

无论如何,这是一些性能测试结果。

每个测试对包含10,000个int32键的SortedList/SortedDictionary进行操作。每次测试重复1,000次(发布版本,无需调试即可开始)。

第一组测试按从0到9,999的顺序添加键。第二组测试在0到9,999之间添加随机随机播放的 key (每个数字仅添加一次)。

***** Tests.PerformanceTests.SortedTest

SortedDictionary Add sorted: 4411 ms
SortedDictionary Get sorted: 2374 ms


SortedList Add sorted: 1422 ms
SortedList Get sorted: 1843 ms

***** Tests.PerformanceTests.UnsortedTest

SortedDictionary Add unsorted: 4640 ms
SortedDictionary Get unsorted: 2903 ms


SortedList Add unsorted: 36559 ms
SortedList Get unsorted: 2243 ms

与任何分析一样,重要的是相对性能,而不是实际数字。

如您所见,在排序后的数据上,排序后的列表比SortedDictionary快。对于未排序的数据,SortedList的检索速度稍快,但添加时的速度慢9倍。

如果两者都在内部使用二叉树,那么对于SortedList而言,对未排序数据的Add操作要慢得多,这非常令人惊讶。排序列表也可能同时将项目添加到排序的线性数据结构中,这会使它变慢。

但是,您希望SortedList的内存使用量等于或大于或至少等于SortedDictionary。但这与MSDN文档所说的相矛盾。

09-30 21:21