侧边栏壁纸
  • 累计撰写 71 篇文章
  • 累计创建 15 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

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

寒江孤影
2023-09-03 / 0 评论 / 0 点赞 / 4 阅读 / 1453 字
温馨提示:
本文最后更新于 2023-09-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

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

如何发现?

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

1、开启调试

2、打开诊断工具

3、开始记录

4、等待 30 秒以上

5、生成汇报

ed748bf2e02f49af8ca3b88b2799f9be.png

6、查看汇报信息

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

7a086dbc32a04e72bea54f14a296670c.png

如何处理?

其实这个 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),大家可以多了解了解

0

评论区