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

我有一个 winforms 应用程序,通常 CPU 占用率约为 2-4%。我们发现 CPU 在有限的次数内出现了高达 27% 的峰值。确定导致此峰值的真正原因的最佳分析工具是什么。我们使用 dottrace,但我不知道如何将其准确映射到 CPU 峰值?

感谢帮助

请先 登录 后评论
本文连接: http://www.china-sunrider.com.cn/question/10850
source: https://stackoverflow.com/questions/104831

6 个回答

Matt

我之前使用过 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 使用率和给定代码块所花费的时间之间可能存在很强的相关性。

如果您可以通过调用应用程序中的某些操作来一致地复制 CPU 峰值,那么我要做的就是尝试使用 VS 分析器,在分析暂停的情况下启动应用程序,在执行通常操作之前启用分析结果尖峰,并检查这些结果。

当然,这假设您具有某种确定性行为来重新创建峰值。如果没有......您可能会考虑将线程进程或垃圾收集作为性能影响的候选者。

请先 登录 后评论
stackoverflow_user

我发现 Compuware 的 DevPartner http://www.compuware.com/ 是一个优秀的分析工具。不幸的是,目前他们似乎不支持 VS 2008。

请先 登录 后评论
warren

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

它会保持峰值多久?

请先 登录 后评论
GvS

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

请先 登录 后评论
Mike Dunlavey

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

补充:也许这是显而易见的,但 CPU 使用百分比并不是一个非常清晰的概念。当你的程序完全运行时,它处于 100%。如果不是,则为 0%。因此,部分百分比必须基于某种随时间的平滑积分。然而,无论是什么,你都会看到一个峰值。有些分析器可以让您关注这样的峰值并分析该间隔。

请先 登录 后评论
mfawzymkh

Xperf/Xperfview 工具是最好的工具,它可以向您显示峰值并允许您深入了解导致峰值的原因。

查看 http://msdn.microsoft.com/en-us/performance/cc825801。 .aspx

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

这些工具基于 ETW 技术(Windows 事件跟踪),它可以让您非常准确地了解流程和整个系统的运行情况。

这些工具还允许您捕获跟踪以进行事后分析,以及附加/分离功能。 希望这会有所帮助。

请先 登录 后评论
user contributions licensed under CC BY-SA.