加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何衡量特定逻辑线程的CPU使用情况?

发布时间:2020-12-15 08:44:07 所属栏目:百科 来源:网络整理
导读:(这与我通常会问的基本编程问题无关!) 我们有一个有趣的问题.我们有一个多线程非可视服务器应用程序(每个进程运行10-20个工作线程),它使用了大量的CPU.这是设计的. 我们无法在开发人员系统上分析此代码的实际工作负载.工作量高度(非常高)杂色.为了优化此代
(这与我通常会问的基本编程问题无关!)

我们有一个有趣的问题.我们有一个多线程非可视服务器应用程序(每个进程运行10-20个工作线程),它使用了大量的CPU.这是设计的.

我们无法在开发人员系统上分析此代码的实际工作负载.工作量高度(非常高)杂色.为了优化此代码,我们需要能够让生产位记录哪些工作程序占用多少CPU.

我们当前的实现使用System.Diagnostics.ProcessThread.TotalProcessorTime来测量,但是在.NET v4中并不保证逻辑.NET线程与ProcessThread的亲和性,因此我们无法确定我们正在测量什么.

我们可以做些什么来衡量每个线程/每个功能的CPU使用情况?

我们听说过一个替代的线程库是一种方式,任何建议?

解决方法

ProcessThread和Thread之间的分割是从.NET 2.0开始的.灵感来自SQL Server团队内部计划使用光纤实现.NET线程的项目.该项目被放弃,没有已知的CLR主机不使用操作系统线程(也称为ProcessThread)来实现.NET线程.

您将遇到的唯一问题是将ProcessThread与.NET线程相匹配.这在.NET 2.0中是有目的的.唯一不错的方法是让Thread本身对GetCurrentThreadId()进行pinvoke,然后找到与ProcessThread.Id的匹配.一旦你在那里,你也可以调整GetThreadTimes().这也要求OpenThread()获取句柄,而CloseHandle()再次关闭它.访问pinvoke.net获取声明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读