【问题标题】:Determining thread performance确定线程性能
【发布时间】:2012-07-22 23:59:32
【问题描述】:

在某些机器上,我的 .Net 应用程序在 CPU 使用率约为 10% 时处于空闲状态。我的第一个倾向是我的一个后台工作线程正在执行一些我不知道的指令,但我不知道如何按线程隔离 CPU 使用情况(任务管理器只是告诉我我的进程使用 x 线程数 [通常约为 30],而不是占用 CPU 的线程)。

我知道以编程方式我可以遍历this post 中提到的线程,但我不知道这是否会给我所需的信息。是否有一个分析器(商业或其他)可以让我分析每个线程的 CPU 使用情况?

【问题讨论】:

  • Visual Studio 2010 内置了一个很好的分析器,至少在 Ultimate 版中是这样。作为穷人的解决方案,您可以尝试在调试器中随机暂停您的代码,并查看它在哪里中断。在 10% 的 CPU 使用率下,您应该有十分之一的机会找到有罪的代码(如果您有一台多核机器,则更多)。
  • 10% 空闲时?选择“在文件中查找”并查找 Sleep(1)/Sleep(0)

标签: c# multithreading performance cpu-usage


【解决方案1】:

试用 Microsoft 的 Perfview:http://www.microsoft.com/en-us/download/details.aspx?id=28567

您可以使用系统 ETW 事件来找出许多 CPU 利用率低的问题。

【讨论】:

  • 这看起来很有希望。我可以说它绝对是一个开发工具,因为它的可用性非常缺乏:)
  • 它由 .NET 运行时团队的架构师 VanceM (blogs.msdn.com/b/vancem) 开发
【解决方案2】:

如何附加调试器并点击“中断”按钮。然后看看你的代码中是否有任何线程正在运行?

【讨论】:

  • 啊,我的假设是您没有拥有所有 30 个线程,并且大多数线程将处于空闲状态或处于某种睡眠或等待语句中。如果所有线程都在“运行”,为什么 CPU 使用率不会达到 100%?
  • 嗯,它们是“活着的”,但我不认为它们正在运行。我现在有点明白你的意思了。我会试一试,看看能找到什么,谢谢!
【解决方案3】:

我会推荐JetTrace dotTrace Performance。它会告诉你你的代码大部分时间都花在了哪里,以及线程。 (它是商业的,但提供 10 天免费试用。)

【讨论】:

  • 免费试用 10 天 ;-)
【解决方案4】:

我第二个 NominSim's answer 并会推荐 Red Gate's ANTS Performance Profiler。过去帮了我很多。

他们确实有 14 天的免费试用版。

【讨论】:

  • 我使用过 ANTS,但 .net 4.0 CAPSOL 的更改确实破坏了它们强大的分析能力。我仍然有它的许可证,但我不知道如何获得各个线程的实时 CPU 使用率。我去看看文档。谢谢!
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多