【发布时间】:2012-01-11 11:51:26
【问题描述】:
我们有一个用 .Net 4.0 编写的 C# WPF 应用程序,其中一些相对简单的数据绑定和网格功能。
样式涉及一些“调整”,包括一些悬停颜色等。
在覆盖 20 台部署的 3 台机器上,我们遇到了一些非常奇怪的 UI 性能问题。
实际上,在重新启动后应用程序运行良好,但在一定(未确定的)时间后,用户界面变得异常缓慢。例如,将鼠标悬停在按钮上,在应用/呈现悬停颜色样式之前最多会有几秒钟的延迟。
这些机器的规格几乎相同。图形驱动程序已更新,标准设置是两个 NVidia Quadro 290 卡。此外,我们制作了一个“测试”应用程序,其中仅包含一些测试 UI 组件(包括 Fluent Ribbon),并且没有任何代码。问题依然存在。
我已运行 Windows 性能套件以“深入了解”运行时 WPF,而且非常奇怪的是,如果勾选“禁用脏区支持”选项,UI 会恢复正常响应。我的理解是,如果有的话,这应该会进一步降低性能!!!
我在这里找不到任何其他尝试。 DotTrace 性能分析表明,大部分应用程序时间都花在了 PresentationFramework.dll 中。
[编辑]所有机器都是 Windows XP SP3。
[编辑] 这可能发生在所有机器上,并且通常不允许应用程序运行足够长的时间来显示问题。我们现在正在对此进行测试。
[编辑] 我还应该指出,我们正在试验详细的热修复 here。目前已经安装在单机上,我会相应更新。
[编辑 - 24 小时后] 所以两台机器现在已经在一夜之间运行相同的代码。在我的机器上(从未出现过问题),初次登录后应用程序非常缓慢,但不到一分钟后又恢复正常。 (我把它归结为机器显然把东西从硬盘上拉下来了)。在另一台机器上(通常会显示问题),应用程序在几秒钟后有所改善,但与我的相比现在仍然缓慢。
[编辑 - 48 小时后] 在测试机器上,测试应用程序在运行 48 小时后现在完全没有响应(锁定)。在同一台机器上,一个轻量级的“外壳”WPF 应用程序(包含一个选项卡控件、一些按钮和一些面板和网格)仍在运行并且响应完美。所以这些更复杂的控件中的某些东西导致了这个问题......这确实指向(可能)可能是根本原因的触发器和委托。我会再次分析应用程序/控件。同时,是否有人对如何确保应用程序定期“清理”自身有任何建议?因为我们在这里查看第三方控件,所以我编辑它们的选项有限!
如果可以提供任何提示,我们将不胜感激!
【问题讨论】:
-
可以提供代码吗?其他一些 SO'er 可能也想尝试一下。问题出现前的最短时间是多长时间?
-
如有必要,我可以提供代码......但我们目前的测试应用程序实际上只涉及使用 Fluent Ribbon(可从 CodePlex 加载),在和空网格中。除了明显的 init 调用之外,没有其他代码。如果它能让生活更轻松,我当然会提供这个拉链。
-
不要对原型系统抱有太大期望。作为第一步,我会检查代表的使用情况。你经常用吗?
-
我们现在正在尝试确定最短时间。我应该很快就能给你一个更准确的答案。但是目前,如果我早上重新启动有问题的机器,该应用程序在白天运行良好,到第二天我们检查它时,这个问题就出现了。
-
@Dmitry 在这种情况下,原型系统是什么意思?没有专门设置委托,因为我们没有绑定到控件的事件/命令。 (所以除了框架在引擎盖下设置的内容之外没有其他内容)。
标签: c# wpf performance