本文来告诉大家我实际使用基准测试的在 .NET Core 3.1 的链表 LinkedList 和 Dictionary 字典的在元素增删的性能对比
从算法分析上,其实字典和链表在时间上的性能是差不多的,甚至可以认为字典的速度会比链表更高。但是从空间上,如果一边增加元素一边删除元素那还是链表省空间。同时在字典空间满了之后,修改字典容量会比链表使用更多的时间
以下是我用不够严谨的基准性能测试的数据
下面是对比一边加入元素一边删除元素的性能
Method | Mean | Error | StdDev | Ratio | RatioSD |
---|---|---|---|---|---|
‘LinkedList’ | 2,424.9 us | 28.53 us | 23.83 us | ? | ? |
‘Dictionary’ | 686.0 us | 5.61 us | 4.97 us | 1.00 | 0.00 |
下面是将元素完全加入之后再删除全部删除的性能对比
Method | Mean | Error | StdDev | Ratio | RatioSD |
---|---|---|---|---|---|
‘LinkedList’ | 2.582 ms | 0.0303 ms | 0.0253 ms | ? | ? |
‘Dictionary’ | 1.366 ms | 0.0192 ms | 0.0170 ms | 1.00 | 0.00 |
仅加入元素的性能对比
Method | Mean | Error | StdDev | Ratio | RatioSD |
---|---|---|---|---|---|
‘LinkedList’ | 2.371 ms | 0.0466 ms | 0.0697 ms | 0.83 | 0.02 |
‘Dictionary’ | 2.855 ms | 0.0380 ms | 0.0317 ms | 1.00 | 0.00 |
通过测试可以看到,只有在加入元素的性能,链表的性能才会比字典快一点点。而如果包含了删除,那么性能还是字典强
本文代码放在github欢迎小伙伴访问
本文的测试本来是为了给 WPF 框架做性能优化使用的,请看 dotnet 读 WPF 源代码笔记 AppDomainShutdownMonitor 的设计 但实际发现使用字典性能更好
本文的测试仅仅只是适用于 WPF 的 AppDomainShutdownMonitor 类的情况,不代表其他业务下依然是字典更优
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-C-%E9%93%BE%E8%A1%A8%E5%92%8C%E5%AD%97%E5%85%B8%E7%9A%84%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
无盈利,不卖课,做纯粹的技术博客
以下是广告时间
推荐关注 Edi.Wang 的公众号
欢迎进入 Eleven 老师组建的 .NET 社区
以上广告全是友情推广,无盈利