我有几个客户,我的WinForms应用程序的表现不如其他客户。我在办公室里使用JetBrain的dotTrace,但这并不能帮助我找到客户机器上的瓶颈。如何分析已部署到客户的.NET应用程序的性能?是否有任何具有可再发行组件的分析工具可以让我生成在我将结果(dotTrace中的快照)带回完整分析工具之前无法使用的分析结果?
更新:由于NProf可以自由分发,我正在考虑将其部署到客户的工作站。我会在这里报告结果。
答案 0 :(得分:3)
我不熟悉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 可以从已检测的应用程序中捕获性能数据。
我从来没有直接完成它,只是从命令行完成,所以我不能在那里为你提供太多帮助,但我认为这对你来说是另一种选择,至少。
答案 1 :(得分:1)
所以我认为您可能需要的是衡量性能广告部署时间的一些方法。虽然它们非常不合适,但我可能会考虑在应用程序中添加性能计数器。见System.Diagnostics。我已广泛使用它来监视部署中的应用程序。我发现分析器虽然很棒但有时会因为它们的开销而隐藏某些问题。例如,如果您的应用程序访问数据库并且磁盘速度很慢,导致查询花费更长时间,这可能在分析器中不明显,因为应用程序通常运行速度较慢。
对于客户端,如果您的应用在安装时不需要管理员权限,我可能会将perf计数器作为“诊断模式”的一部分,因为安装它们需要管理员访问权限。您可能希望使用perf计数器来测量数据库和服务调用的持续时间,可以增长的数据结构的大小以及发生的故障数。
我们已经知道您的代码有效,因为在某些客户设置上它可以正常工作。因此,请考虑在应用程序中添加检测。这是编写可靠软件(如良好的日志记录)的重要元素之一。这不好玩,但在我看来,它需要完成。它通常是唯一可以让您了解应用程序在部署中执行的操作的唯一方法。我正在进行的当前应用程序从Rev 1中的大约20个perf计数器到Rev 2中的大约150个。我不会一直监视它们中的大多数,但是为了提醒我性能和可靠性问题,它们非常值得花时间