我有一个winforms应用程序,通常是大约2-4%的CPU。我们看到一些高达27%的CPU峰值次数有限。什么是最好的分析工具来确定实际导致这个尖峰的原因。我们使用dottrace,但我不知道如何将其映射到CPU峰值?
感谢帮助
答案 0 :(得分:2)
之前我使用过2个分析工具 - RedGate的ANTS分析器,以及Visual Studio Team System中的内置分析器。
自从我使用RedGate(http://www.red-gate.com/products/ants_profiler/index.htm)探查器以来已经有一段时间了,尽管最近我使用了Visual Studio 2008中内置的。
话虽这么说,我觉得RedGate产品使用起来更直观。当我使用RedGate产品时,让我感到沮丧的一件事是,我无法指示探查器仅在某个特定点开始编写我的代码 - 在达到相当数量的代码之前我无法达到性能损失已经执行,因此污染了我的结果。从那以后,他们可能已经添加了这个功能。
Visual Studio的内置版本仅适用于其产品的最高端版本。如果我错了,有人会纠正我,但我不认为即使是“专业”版本也有探查器。我目前正在使用Team System Developer Edition, 拥有代码分析工具。
VS版本可以做的一件事是,您可以暂停分析,甚至可以在暂停分析的情况下启动应用程序,这样您就可以专注于非常具体的性能。当您试图了解分析结果时,这非常有用。
编辑:这两个工具都会显示内存使用情况,调用特定方法的次数以及每种方法花费的时间。据我所知,他们不做的是在任何给定的时间点显示CPU使用率。但是,CPU使用率与给定代码块中花费的时间之间可能存在很强的相关性。
如果您可以通过调用APP中的某些操作来一致地复制CPU峰值,那么我要做的就是尝试使用VS Profiler,启动应用程序并进行性能分析暂停,在您执行任何操作之前启用性能分析导致峰值,并检查这些结果。
这当然假设您有某种确定性行为来重新创建尖峰。如果不是......您可能会考虑线程化进程或垃圾回收,以确定您的性能。
答案 1 :(得分:0)
我发现Compuware http://www.compuware.com/的DevPartner是一款出色的性能分析工具。不幸的是,目前它们似乎不支持VS 2008。
答案 2 :(得分:0)
此外,这个尖峰真的令人担忧吗?在什么样的硬件上你看到了这个?在四核CPU上飙升至27%可能会引起担忧,但不会在800Mhz P3上出现。
它持续多长时间? @Matt有一个很好的观点,即垃圾收集可能有问题。或者可能交换到磁盘。
它是长时间影响整体系统性能,还是偶尔影响几秒钟?
并非找到解决方案不应该引起关注,但它有多重要?
答案 3 :(得分:0)
您还可以通过Sysinternal Process Explorer和Perfmon了解您的应用程序(就像在GC上发生尖峰一样)。
答案 4 :(得分:0)
如果您的应用是单线程,the best profiling tool is your IDE.
补充:也许这很明显,但CPU使用率不是一个非常明确的概念。当你的程序运行时,它是100%。如果不是,那就是0%。因此,部分百分比必须基于某种平滑积分随时间推移而变化。然而,不管它是什么,你都看到了飙升。有些分析器让你在这样的尖峰中回家并分析这段时间。
答案 5 :(得分:0)
最好的一个会向您显示峰值,并允许您深入查看导致它的原因是Xperf / Xperfview工具。
退房 http://msdn.microsoft.com/en-us/performance/cc825801.aspx
和 http://msdn.microsoft.com/en-us/library/cc305221.aspx
这些工具基于ETW技术(适用于Windows的事件跟踪),可让您高度准确地了解流程和整个系统的运行情况。
这些工具还允许您捕获事后分析的痕迹,以及附加/分离功能。 希望这会有所帮助。