当前位置: 首页 > news >正文

dotnet集合类型性能优化的两个小儿科的知识点

比较水的文章,非常的基础,就当是记录下吧!

1.关于在集合中搜索带来的性能问题,建议用字典(Dictionary)

很多时候需要在一个集合如List中按唯一键查找某个对象,如果用Where扩展方法或者find等方法,是很慢的,特别是大量这样的查找就特别慢。
如果是对集合中的每个数据都要做点什么,那么干脆循环它好了。
如果必须不断的搜索的场景,那么把集合ToDictionary(),之后每次需要用就在这个Dictionary中按key拿,性能飞起。

2.复杂类型都很占内存,比如List和Dictionary

这点大家都应该很理解,复杂类型带来功能高级方便的功能同时也会带来更多的开销。
比如泛型List,少放点数据没太大问题,它是动态数组,添加大量数据时可能会触发容量调整,它有个Capacity属性表示它真实大小,添加的数据越多,这个Capacity越大,它一般是添加数据的2倍(不全是,没有数据时是0,一个数据时是4,所以不全是2倍),就是冗余分配更多的内存。
用数组能减少这部分内存占用。同理Dictionary也类似。

3.再说过集合顺序问题

多线程下我们经常用ConcurrentDictionary字典,它的Keys和Values等属性返回的集合不一定是按添加数据的顺序的,这点在顺序敏感的代码中要注意,原因是它内存实现用了桶,数据在哪个桶可能是按hash来的,Values返回的时候顺序就没法保证,当然大部分时候甚至调试时与添加数据顺序是一样的。

碎碎念,end

http://www.gsyq.cn/news/22586.html

相关文章:

  • ABC420 AtCoder Beginner Contest 420 游记(VP)
  • ubuntu安装和设置为图形界面或命令行界面
  • 站位1
  • ubuntu2204系统ip地址配置
  • 苹果M5芯片正式登场 一文带你了解三款新品有何升级
  • 2025/10/16 模拟赛笔记 - sb
  • 神经网络之Softmax激活函数求导过程 - 指南
  • experiment2
  • 关于卷积神经网络(CNN)的入门学习报告
  • 【记录】Ubuntu|Ubuntu服务器挂载新的硬盘的流程(开机自动挂载) - 指南
  • 10月16日日记
  • 为 .NET 10 GC(DATAS)做准备
  • LLM学习记录DAY3
  • 二进制警报器
  • 常见问题处理 --- win卡任务栏 设置无法打开 桌面重启
  • p66实验题
  • 20251016
  • 虚拟线程的pinned问题终于被jdk25完美解决了
  • P4168 [Violet] 蒲公英题解
  • VGG使用块的网络
  • 使用SpringBoot + Thymeleaf + MyBatisPlus实现一个简单的书籍管理系统
  • 创业思路
  • P2605 [ZJOI2010] 基站选址
  • kafka连接认证
  • CF622D 题解
  • vue学习的总结
  • 【28】C# WinForm入门到精通 ——多文档窗体MDI【属性、强大的方法、实例、源码】【多窗口重叠、水平平铺、垂直平铺、窗体传值】
  • 第五周预习
  • 2025 非标门/铸铝门/别墅大门厂家推荐榜:聚焦品质与服务的实力之选
  • 工业数字化未来:IT与OT融合实践