.net 软件 CPU 占用率高问题处理

.net 软件 CPU 占用率高问题处理

一般这种都是因为 代码问题 导致的,比如最经典的就是死循环,而且循环体内,没有做任何的 CPU 抢占丢弃处理,往往这种代码极易引起 CPU 占用率狂飙。

如何发现?

.net 可以通过 Visual studio 的诊断工具来查看CPU、内存使用信息,

1、开启调试

2、打开诊断工具

3、开始记录

4、等待 30 秒以上

5、生成汇报

在这里插入图片描述
453.png)]

6、查看汇报信息

通过查看报告可以发现,纳尼?小伙伴的某段代码竟然是一个空死循环,估计是太忙了,写了之后忘了吧,大家都没太留意 CPU 占用率,所以一直把这个问题保留到现在。
在这里插入图片描述

如何处理?

其实这个 CPU 占用率过高的问题,是软件经理提出的,当时提出这个问题之后,我在想可能是因为开了很多while(true)的原因吧,因为只有不恰当的死循环才会导致频繁申请 CPU 调用。

根据我的想法,我先是在一些 死循环体内用 AutoResetEvent 来代替 Thread.Sleep(100), 改了好几个,但是毫无效果,CPU 占用率与之前的几乎一致。说明这些优化起到的作用是有限的。况且 Thread.Sleep 是将 CPU 占用权丢弃,更不会引起这个 CPU 占用率过高的问题。

幸好,VS 提供了强大的诊断工具,利用工具可以快速发现问题的根源, 要不然,一个个死循环找下去,真的很费人(除非循环很少)。

1、最粗暴:删除

2、将 Thread.sleep(1) 加入到循环体,从而主动丢弃 CPU 使用权

总结

1、磨刀不误砍柴工,各种工具的都可以多接触,提高效率嘛

2、Sleep(1) 的妙用,此外还有 Sleep(0),大家可以多了解了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值