Winform应用程序性能分析CPU使用率/峰值。

时间:2020-03-06 14:27:29  来源:igfitidea点击:

我有一个Winforms应用程序,通常使用大约2-4%的CPU。在有限的次数内,我们看到一些峰值达到27%的CPU。什么是确定实际导致此峰值的最佳性能分析工具?我们使用dottrace,但我看不到如何将其准确映射到CPU峰值?

感谢帮助

解决方案

在RedGate的ANTS分析器和Visual Studio Team System中的内置分析器之前,我已经使用了2个分析工具。

自从我使用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,启动分析暂停,在执行任何通常导致结果的操作之前立即启用分析加价,然后检查那些结果。

当然,这假定我们具有某种确定性的行为来重新创建峰值。如果不是...,我们可能会考虑将线程进程或者垃圾回收作为提高性能的一种选择。

Ive从Compuware http://www.compuware.com/发现DevPartner是一个出色的分析工具。不幸的是,目前看来他们不支持VS 2008.

另外,这个峰值真的令人担忧吗?在什么样的硬件上我们会看到呢?四核CPU上的峰值飙升至27%可能令人担忧,而800Mhz P3上则不会。

它会持续多长时间? @Matt有一个很好的观点,即垃圾收集可能会出错。或者潜在地交换到磁盘。

它会长时间影响整个系统性能,还是时不时影响几秒钟?

并不是不应该为此找到解决方案,而是有多么重要?

我们还可以使用Sysinternal Process Explorer和Perfmon了解有关应用程序的很多知识(就像峰值发生在GC上一样)。

如果应用程序是单线程,则最好的分析工具是IDE。

补充:也许很明显,但是CPU使用百分比并不是一个很明确的概念。当程序完全运行时,它是100%。如果不是,则为0%。因此,部分百分比必须基于随时间推移的某种平滑积分。但是,无论是什么,我们都会看到峰值。一些探查器可让我们了解这种峰值并仅分析该间隔。

最好的显示峰值的工具,它使我们可以深入了解是什么导致了Xperf / Xperfview工具。

退房
http://msdn.microsoft.com/zh-CN/performance/cc825801.aspx


http://msdn.microsoft.com/en-us/library/cc305221.aspx

这些工具基于ETW技术(适用于Windows的事件跟踪),可为我们提供有关过程以及整个系统正在发生的事情的超准确视图。

这些工具还允许我们捕获痕迹以进行事后分析,以及添加/分离功能。
希望这可以帮助。