C#性能优化随记

2019年我在用C#重新influxdb内核后优化性能时发过几篇性能优化的文章,最近又发现了几处瓶颈,在此记录一下。

1. 集合处理时可以使用Parallel并发处理来提高性能

程序内部的集合类型普遍采用了Concurrent并发安全的,在写入接口收到一组数据时(Dictionary<点key, values>),之前的做法是foreach()遍历处理,现在修改为Parallel.Foreach()处理,Parallel会根据CPU的核心数开辟并发数,测试下来一个177M的wal文件写入从22分钟缩短到了3分6秒,性能提高了6倍。

2. 链表结构性能低下,建议使用集合(List)

接近了问题1后,用性能探查发现50%的CPU消耗在了一个不起眼的链表结构上,百度一下发现是链表结构的内存访问性能差,不如集合这种直接内存索引的方式,修改后几乎见不到这部分CPU消耗了。

3. 学会使用性能探查器

用性能探查器记录的CPU数据需要在图上框选一段时间,否则看到的数据就是程序初始运行的CPU占用,而不是程序长时间运行的CPU占用。看到CPU占用后,找到热点代码就可以发现问题了。我的问题1、2都是这么发现的。

4. 用好Copilot

最近一有问题就先问Copilot,基本能帮你把问题一条条列出来,还能给出优化后的代码,只是免费的有次数限制,这个月的已经早早用完了。

相关推荐
LawrenceLan3 小时前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客4 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz4 小时前
C语言第1章
c语言·开发语言
行者964 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon5 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio5 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词5 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派5 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx6 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141916 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式