【问题标题】:Performance bottleneck - using Visual Studio性能瓶颈 - 使用 Visual Studio
【发布时间】:2011-07-17 03:17:13
【问题描述】:

我正在寻找一种在解决方案(很多项目)中找到瓶颈方法的方法。

假设我有一个庞大的程序(1000 多个方法),我想通过查找被大量调用的方法(实际在运行时使用)来提高性能,并对其进行优化。
我需要它来解决用 C++、C#、CLI/C++ 编写的复杂问题。 (我可以在调试中编译它并拥有 .pdb 文件)
所以,我正在寻找某种分析器,它可以告诉我每种方法使用了多少 CPU 时间。

我可以在 Visual Studio 中使用什么工具/插件/功能来获取这些信息?
我希望能够将程序运行几分钟,然后分析该方法的cpu使用情况。甚至更好 - cpu 数量/调用次数。
如果我可以按命名空间或 dll/package/project 排序会更好。

【问题讨论】:

    标签: c# c++ visual-studio optimization cpu-usage


    【解决方案1】:

    更昂贵的 Visual Studio 版本应该提供内置的 Profiler:请参阅this 线程。

    但是有更多的方法可以分析,这个话题在 stackoverflow 上已经讨论过很多次了,例如here

    【讨论】:

    • 我看到的大多数问题都是关于特定语言的,我希望项目中的托管和非托管代码都适用。
    【解决方案2】:

    根据 Christian Goltz 的一个链接,我发现了一个可以做我想做的事情的程序,它可以分析托管和非托管代码:

    AQTime Pro

    【讨论】:

      【解决方案3】:

      我对 JetBrains 的 DotTrace 产品有过一些很好的体验。不确定它是否具有 IDE 集成或您正在寻找的所有功能,但它肯定可以完成工作。

      【讨论】:

      • 谢谢,看起来不错,但这仅适用于 .Net 应用程序,它不适用于非托管代码。
      【解决方案4】:

      This method 技术含量低,但效果很好。

      我也在一个庞大的应用程序中工作,当我们遇到性能问题时,它会很快找到它们。

      【讨论】:

      • 嗯,我是这样做的,但它不适用于多线程(超过 5 个线程,你只会在每个线程中获得一个随机方法)。
      • @Yochai:我所做的是查看每一个并了解它在做什么。大多数时候,它只是在天真地等待工作。其他时候,它实际上是在做某事。现在,一次是不够的。您必须暂停足够多的时间才能看到线程执行不止一次它并不严格需要执行的操作。这就是你发现问题的方式。
      • @Yochai:在每个堆栈上,不要只看业务端。查看所有内容,这样您就可以了解它正在做的事情的全部原因。这就是你如何判断它是否是绝对必要的。通常,如果看起来像它,但如果你深入研究它,你会发现它确实可以避免。 (当然,你可以在它做任何看起来很慢的事情时暂停它,而不仅仅是在它无所事事的时候。)
      • 是的,我知道,VS2010 有一个漂亮的窗口,其中包含所有线程的所有堆栈。但是只有 10 万行代码,我仍然需要适当的分析。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2015-07-27
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多