我有几个客户,我的 WinForms 应用程序在其他客户中的表现不如其他客户。我在办公室使用 JetBrain 的 dotTrace,但这并不能帮助我找到客户机器上的瓶颈。如何分析已部署给客户的 .NET 应用程序的性能?是否有任何带有可再分发组件的分析工具,可以让我生成无法使用的分析结果,直到我将结果(dotTrace 中的快照)带回完整的分析工具?
更新:由于NProf可以自由分发,我正在考虑将其部署到客户的工作站。我将在这里报告结果。
我不熟悉 dotTrace,但我在 Visual Studio 的上下文中使用了 Visual Studio 2008 检测和分析工具,我相信它们是随 .NET 3.5 SDK 一起分发的。
VSInstr.exe 工具: http: //msdn.microsoft.com/en-us/library/ms182402.aspx 将检测部署的二进制文件。
VSPerfCmd: http: //msdn.microsoft.com/en-us/library/ms182403.aspx 可以从检测的应用程序中捕获性能数据。
我从来没有直接从命令行单独完成,所以我不能在那里为你提供太多帮助,但我认为这是你的另一个选择,至少。
所以我认为您可能需要一些衡量效果广告部署时间的方法。尽管它们很不优雅,但我可能会考虑将性能计数器添加到您的应用程序中。请参阅System.Diagnostics。我已经广泛使用它来监视部署中的应用程序。我发现分析器虽然很棒,但有时会因为开销而隐藏某些问题。例如,如果您的应用程序遇到数据库并且磁盘很慢导致查询花费更长的时间,这在分析器中可能不明显,因为应用程序通常运行速度较慢。
对于客户端,如果您的应用在安装时不需要管理访问权限,我可能会将性能计数器作为“诊断模式”的一部分,因为安装它们需要管理员访问权限。您可能希望使用性能计数器来测量诸如数据库和服务调用的持续时间、可以增长的数据结构的大小以及发生的故障数量等。
我们已经知道您的代码可以正常工作,因为在某些客户设置上它可以正常工作。因此,请考虑在您的应用程序中添加仪器。这是编写可靠软件(如良好的日志记录)的那些乏味的赌注重要元素之一。这不好玩,但在我看来,它需要完成。它通常是唯一能让您了解应用程序在部署中所做的事情的方法。我正在处理的当前应用程序从 Rev 1 中的大约 20 个 perf 计数器增加到 Rev 2 中的大约 150 个。我不会一直监控它们中的大多数,但是为了提醒我性能和可靠性问题,它们非常值得花时间.