这可能是此question的副本,它询问“SortedList和SortedDictionary有什么区别?”不幸的是,答案只不过是引用了MSDN文档(该文档明确指出了两者之间在性能和内存使用上的差异),但实际上并没有回答问题。
根据MSDN,实际上(因此这个问题不会得到相同的答案):
因此,很明显,这表明SortedList<TKey, TValue>
是的更好选择,除非,您需要更快地对未排序的数据进行插入和删除操作。
鉴于上述信息,仍然存在问题,使用SortedDictionary<TKey, TValue>
的实际(实际情况,业务案例等)原因是什么?根据性能信息,这意味着实际上根本不需要SortedDictionary<TKey, TValue>
。
最佳答案
我不确定MSDN文档在SortedList
和SortedDictionary
上的准确性如何。看来这两者都是使用二叉搜索树实现的。但是,如果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文档所说的相矛盾。