【问题标题】:How do I identify the thread in application that takes 100% CPU usage in PerfMon?如何在 PerfMon 中识别占用 100% CPU 使用率的应用程序中的线程?
【发布时间】:2016-06-28 07:51:46
【问题描述】:

尝试微调/优化我的 C# 应用程序。一直在运行 PerfMon,我在某些操作上始终获得 100% 的峰值。我可以从 PerfMon 中获取线程实例号,但是在调试时从 Visual Studio 2015 的线程窗口,我如何知道哪个线程是对应的?

还是我走错了路?我想找出不时增加 CPU 使用率的线程的身份。在此先感谢!

【问题讨论】:

  • 好吧,你肯定走错路了。让核心保持忙碌并在尽可能短的时间内完成的线程永远不会有任何问题。您应该更加关注那些似乎没有做任何有用的其他线程。使用调试器很容易看到。并且毫不犹豫地使用the right tool
  • 如上所述,100% 的 CPU 使用率并没有什么问题。即使是工作时间超过 1-2 秒的简单循环也将获得 100% 的使用率。最大的区别在于循环是进行一些计算还是只是在串行端口上等待字节(例如)而不休眠。
  • 谢谢大家。我花了一整天时间玩 Process Explorer。接下来将启动并发可视化器。感谢您为我指明正确的方向。拥有正确的工具绝对重要。 @HansPassant

标签: c# multithreading performance visual-studio perfmon


【解决方案1】:

免责声明:我在 Visual Studio 中使用探查器

我将使用 Visual Studio 调试器附加到该进程,然后打开诊断工具窗口(因为您声明您使用的是 VS 2015)。如果您切换到 CPU 使用情况选项卡,您可以启用 CPU 分析,重现您的问题,然后中断进程。这将导致分析器分析收集的跟踪。最后,您可以点击过滤器下拉菜单,这将允许您按线程过滤调用树。我们还按线程 ID 列出了 CPU 使用率,因此您可以使用它来确定哪个线程正在执行该工作,然后它又在做什么。

【讨论】:

    【解决方案2】:

    为此,我将使用Process Explorer。进程属性(双击要打开的进程)有一个线程选项卡。这可以按 CPU 或周期排序,并有一个按钮来快照线程堆栈。

    它还将使用调试符号来解析该堆栈的内容。

    这使得识别线程正在运行的代码变得更加容易。

    另一个选项是来自 Windows 调试工具的 PerfView:它提供更多数据(但学习曲线更陡峭)。

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2021-03-02
      • 2011-11-15
      相关资源
      最近更新 更多