我不确定 MSDN 文档的准确性如何SortedList
and SortedDictionary
。似乎是说两者都是使用二叉搜索树实现的。但如果 SortedList 使用二叉搜索树,为什么它的添加速度会比SortedDictionary
?
无论如何,这是一些性能测试结果。
每个测试都运行在SortedList
/ SortedDictionary
包含 10,000 个 int32 键。每个测试重复 1,000 次(发布构建、启动而不调试)。
第一组测试按从 0 到 9,999 的顺序添加密钥。第二组测试添加 0 到 9,999 之间的随机打乱密钥(每个数字只添加一次)。
***** 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 倍。
如果两者都在内部使用二叉树,那么对未排序数据的 Add 操作会慢得多,这是非常令人惊讶的。SortedList
。排序列表也可能同时向排序线性数据结构添加项目,这会减慢速度。
但是,您可能期望的内存使用量是SortedList
等于或大于或至少等于SortedDictionary
。但这与 MSDN 文档所说的相矛盾。