我正在寻找一个支持 .NET 的 CPU 分析器
- 大量线程的应用程序。
- (双)四核 CPU。
- 抽样分析。
- 64 位操作系统。
- 命令行 API。
目前,我在使用大多数 .NET 分析器时遇到了麻烦,特别是,
- YourKit 似乎不支持命令行。
- dotTrace 3.1 因 64 位操作系统而崩溃。
到目前为止,我还没有尝试过 Intel VTune。有什么开明的建议吗?
我正在寻找一个支持 .NET 的 CPU 分析器
目前,我在使用大多数 .NET 分析器时遇到了麻烦,特别是,
到目前为止,我还没有尝试过 Intel VTune。有什么开明的建议吗?
线程往往会使大多数分析器感到困惑,因为他们不确定如何计算一个线程被阻塞等待另一个线程的时间以及线程等待工作的时间(如果您不使用线程池)。
根据我们的经验,您应该检查两个分析器: 1. Eqatech有一个免费的分析器,可以为分析执行代码注入。它只适用于方法级别,但确实适用于 64 位,并且可以让您了解您的时间在哪里。2. Red-Gate ANT 分析器是我们用于深入研究行级时序的最佳工具,如果您遇到线程在其执行时间的很大一部分中相互阻塞等待的情况,这一点至关重要。
也就是说,如果您可以在没有用户界面的情况下运行测试,我强烈建议您设置一些 NUnit 性能测试,以便您可以快速轻松地每次都以完全相同的方式重复它们。这样做你可以看到你的时间在哪里,即使使用方法级别分析器,建议和检查单个优化等。你会惊讶于如何从一个地方花费时间只是将它添加到另一个地方,因为线程最终会相互等待,因此进行完全可重复的测试非常有用。
Eqatech 分析器会修改您编译的 IL,因此每当您重新运行该 IL 时,您都会获得一个新的性能跟踪文件,因此它应该适合您的命令行场景。我相信 ANT 可以类似地工作。
最后,如果您的应用程序要在多个环境中使用,我绝对建议在单个处理器或仅超线程处理器上运行一些性能测试。当您对多核调优变得非常积极时,您最终可能会增加足够的开销,从而导致死锁或只是在少量处理器上变慢。
Redgate有一个分析器,如果我没记错的话不能告诉你它是否有你需要的一切,但试试看?:)
-- 编辑 2 --- 另一种可能的选择(但需要更多努力)是使用NProf并只是调整源以去除 GUI?
AQTime很好地支持 64 位操作系统上的命令行应用程序。
- - 编辑 - -
AQTime 也支持命令行 API。它具有启动项目、配置文件和自动退出的选项。我相信它会满足您的所有标准,并支持托管 + 本机代码库。
从命令行上的 AQTime 帮助:
“如您所见,使用命令行参数,您可以启动 AQtime,在其中加载项目,开始分析并在分析完成后关闭 AQtime。所有这些都使您能够将 AQtime 集成到应用程序的自动化测试中。运行例如,在每个应用程序构建后进行这些测试,您可以轻松查看应用程序代码的更改是否导致性能瓶颈或内存使用效率低下。”
你的目标是什么?
如果您想测量例程的执行时间和计数,我想您需要一个分析器。
如果你想找到性能问题,那么你可以修复它们,那是一个不同的问题。
我只是问,因为不知何故,这个想法很流行,他们是一样的。
对于后一个目标,尝试过的人都明白,研究线程调用堆栈的一些随机时间样本是发现性能问题的一种非常有效的方法。
我知道 Java 允许您同时停止所有线程并转储它们的调用堆栈。我认为.net 开发环境会允许同样的事情。
如果没有,只需在 IDE 下运行它并一次停止一个线程,看看它是否在浪费任何周期。如果是,您只需修复它。重复直到找不到任何东西。
如果你对所有线程都这样做,那么至少你知道任何慢都不是由于任何给定线程的慢。您仍然可能遇到不必要的消息流量问题。诊断起来有点棘手。