【问题标题】:How can I profile the performance of a .NET app already deployed to a customer?如何分析已部署给客户的 .NET 应用程序的性能?
【发布时间】:2009-01-06 13:57:00
【问题描述】:

我有几个客户,我的 WinForms 应用程序在其他客户中的表现不如其他客户。我在办公室使用 JetBrain 的 dotTrace,但这并不能帮助我找到客户机器上的瓶颈。如何分析已部署给客户的 .NET 应用程序的性能?是否有任何带有可再分发组件的分析工具,可以让我生成在将结果(dotTrace 中的快照)带回完整的分析工具之前无法使用的分析结果?

更新:由于NProf 可以免费分发,我正在考虑将其部署到客户的工作站。我会在这里报告结果。

【问题讨论】:

    标签: .net winforms deployment profiler dottrace


    【解决方案1】:

    我不熟悉 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 可以从检测的应用中捕获性能数据。

    我从来没有直接从命令行直接完成,所以我不能在那里为你提供太多帮助,但我认为这至少是你的另一种选择。

    【讨论】:

      【解决方案2】:

      所以我认为您可能需要一些衡量效果广告部署时间的方法。尽管它们很不优雅,但我可能会考虑将性能计数器添加到您的应用程序中。见System.Diagnostics。我已经广泛使用它来监视部署中的应用程序。我发现分析器虽然很棒,但有时会因为开销而隐藏某些问题。例如,如果您的应用程序遇到数据库并且磁盘很慢导致查询花费更长的时间,这在分析器中可能不明显,因为应用程序通常运行速度较慢。

      对于客户端,如果您的应用在安装时不需要管理员权限,我可能会将性能计数器作为“诊断模式”的一部分,因为安装它们需要管理员权限。您可能希望使用性能计数器来衡量数据库和服务调用的持续时间、可以增长的数据结构的大小以及发生的故障数量等。

      我们已经知道您的代码可以正常工作,因为在某些客户设置上它可以正常工作。因此,请考虑为您的应用程序添加仪器。这是编写可靠软件(如良好的日志记录)的那些乏味的赌注重要元素之一。这不好玩,但在我看来,它需要完成。它通常是唯一能让您了解应用程序在部署中所做的事情。我正在处理的当前应用程序从 Rev 1 中的大约 20 个 perf 计数器增加到 Rev 2 中的大约 150 个。我不会一直监控它们中的大多数,但是为了提醒我性能和可靠性问题,它们非常值得花时间.

      【讨论】:

      • 我看到了内存使用和数据库速度的有用性,但没有看到执行速度,例如应用程序启动过程中的瓶颈是什么。您对应用启动时使用性能计数器有什么建议吗?
      猜你喜欢
      • 2018-06-11
      • 2012-10-25
      • 2016-08-09
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2012-01-20
      相关资源
      最近更新 更多