WPF应用程序完全冻结1分钟

6
我在WPF应用程序的生产环境中遇到了以下非常奇怪的问题:
  • 客户报告该程序运行极其缓慢。有时整个界面会冻结约一分钟
  • 在此“冻结”期间,没有CPU活动。其他程序仍然可以正常工作
  • 该问题总是在用户身后的PC上发生。也就是说,当我使用RDP或TeamViewer登录时,很难复现这个问题,尽管我曾经看到过它的发生
  • 更加奇怪的是:这家公司有大约40台具有相同硬件的PC。只有其中5台出现了这个问题(PC:HP Compaq 6000 Pro Small Form Factor)

我将在几天内访问该公司以获得对PC的物理访问权限。

需要注意的一点是:这个程序在大约1000家公司中运行没有问题,这让我认为可能是硬件存在问题。

您如何诊断这样的问题?使用哪些工具?有什么提示或指针吗?


1
没有3D芯片组的电脑?那么它们无法加速生成WPF吗? - ykatchou
2
我想知道是否类似于这个链接所示的做法:http://blogs.technet.com/b/markrussinovich/archive/2010/12/07/3373406.aspx 和 http://blogs.technet.com/b/markrussinovich/archive/2010/01/13/3305263.aspx 会有助于诊断问题。 - Ray
你使用的框架版本是什么?应用程序的后端是什么样子?它是否访问网络资源,如数据库、Web服务等?事件日志中有什么信息吗? - RQDQ
尝试一些基于 WPF 的诊断应用程序,并观察它们对硬件的反应。互联网上有一些应用程序是原型,演示了高数据绑定/复杂 UI 效果/重量级图形/动画/大量命令行为测试等负载测试。 - WPF-it
在这种情况下,一个有用的工具可能是进程监视器。如果你能在这个卡顿发生时进行录制,它可能会让你了解它正在做什么。 - Justin
如果冻结恰好持续60秒,那么这听起来非常像某种超时 - 特别检查在冻结开始时是否进行了任何网络访问。 - Justin
3个回答

2
感谢大家的建议。我尝试了各种方法。在这种情况下,Ray的评论最有帮助,他说:
“我想知道是否做类似于这个:blogs.technet.com/b/markrussinovich/archive/2010/12/07/…和这个:blogs.technet.com/b/markrussinovich/archive/2010/01/13/…会有助于诊断问题。” - Ray Sep 16 at 9:32
当应用程序处于空闲状态时,Process Monitor指出与Direct3D相关的注册表中有各种读取操作。这使得显卡驱动程序变得可疑。我删除了驱动程序并安装了更新版本(我们之前尝试过这样做,但现在有了更新的版本)。这个更新解决了这个问题。

1

我注意到我们实验室中出现了类似的情况。该应用程序经常会冻结,但是没有CPU或网络活动。在许多台电脑上都有相同的情况,无论是旧机器还是新机器。

最终我找到了原因。由于该应用程序使用Web服务,并且默认情况下代理是“自动”检测的,因此发现过程会使一切都冻结数秒钟。

通过将代理设置为空,一切都正常了。

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


我们遇到了类似的代理相关问题,但在我们的情况下,我们没有使用 Web 服务。相反,某些内部东西试图访问网络,因为网络基础设施的设置方式导致某种代理超时。我认为最终我们改变了 machine.config 设置来解决这个问题。 - Justin
我们不使用Web服务或任何相关内容,所以在我们的情况下,这不可能是问题。但感谢您的建议。 - Robbert Dam

-1
如果问题与 WPF 相关,您应该检查常见性能瓶颈,如昂贵的数据绑定或在应用程序中频繁发生且涉及重型处理的 UI 事件。 分析器是在这种情况下非常宝贵的工具,一些好的工具包括 Red Gate 性能分析器和来自 SmartBear Software 的 AQTime。 另一个不错的工具是 Snoop,WPF Spy 工具,它允许分析 UI 对象树。如果此树有不必要的对象,请考虑清理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接