dotnet C# 链表和字典的性能对比

本文来告诉大家我实际使用基准测试的在 .NET Core 3.1 的链表 LinkedList 和 Dictionary 字典的在元素增删的性能对比

从算法分析上,其实字典和链表在时间上的性能是差不多的,甚至可以认为字典的速度会比链表更高。但是从空间上,如果一边增加元素一边删除元素那还是链表省空间。同时在字典空间满了之后,修改字典容量会比链表使用更多的时间

以下是我用不够严谨的基准性能测试的数据

下面是对比一边加入元素一边删除元素的性能

MethodMeanErrorStdDevRatioRatioSD
'LinkedList'2,424.9 us28.53 us23.83 us??
'Dictionary'686.0 us5.61 us4.97 us1.000.00

下面是将元素完全加入之后再删除全部删除的性能对比

MethodMeanErrorStdDevRatioRatioSD
'LinkedList'2.582 ms0.0303 ms0.0253 ms??
'Dictionary'1.366 ms0.0192 ms0.0170 ms1.000.00

仅加入元素的性能对比

MethodMeanErrorStdDevRatioRatioSD
'LinkedList'2.371 ms0.0466 ms0.0697 ms0.830.02
'Dictionary'2.855 ms0.0380 ms0.0317 ms1.000.00

通过测试可以看到,只有在加入元素的性能,链表的性能才会比字典快一点点。而如果包含了删除,那么性能还是字典强

本文代码放在github欢迎小伙伴访问

本文的测试本来是为了给 WPF 框架做性能优化使用的,请看 dotnet 读 WPF 源代码笔记 AppDomainShutdownMonitor 的设计 但实际发现使用字典性能更好

本文的测试仅仅只是适用于 WPF 的 AppDomainShutdownMonitor 类的情况,不代表其他业务下依然是字典更优

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

lindexi_gd CSDN认证博客专家 C# WPF UWP 微软最具价值专家
我是微软Windows应用开发方向的最具价值专家,欢迎访问我博客blog.lindexi.com里面有大量WPF和UWP博客
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页