WPF C#应用程序性能

Nic*_*ick 18 c# wpf performance

我们有一个用.Net 4.0编写的C#WPF应用程序,它有一些相对简单的数据绑定和网格功能.

造型包括一些"调整",包括一些悬停颜色等.

在包含20个部署的3台机器上,我们遇到了一些非常奇怪的UI性能问题.

实际上,重新启动后应用程序运行良好,但在一定(未确定)的时间后,UI变得非常缓慢.例如,将鼠标悬停在按钮上,在应用/渲染悬停颜色样式之前,将会延迟几秒钟.

这些机器的规格几乎相同.图形驱动程序已更新,标准设置为两个NVidia Quadro 290卡.另外,我们制作了一个"测试"应用程序,其中只包含一些测试UI组件(包括Fluent功能区),后面没有代码.问题仍然存在.

我已经运行Windows性能套件来"深入"运行时WPF,而且非常奇怪的是,如果勾选了"禁用脏区支持"选项,则UI将恢复正常响应.我的理解是,如果有的话,这应该会进一步降低性能!

我在这里尝试其他任何东西.DotTrace性能分析表明,大部分应用程序时间都花在了PresentationFramework.dll上.

[编辑]所有机器都是Windows XP SP3.

[编辑]这可能发生在所有机器上,并且通常不允许应用程序运行足够长的时间来呈现问题.我们现在正在测试这个.

[编辑]我还应该指出,我们正在尝试这里详述的修补程序.它暂时安装在一台机器上,我会相应更新.

[编辑 - 24小时后]所以两台机器现在一夜之间运行相同的代码.在我的机器上(从未表现出问题),在初始登录后,应用程序非常缓慢,但不到一分钟后恢复正常.(我把它放到机器上清楚地从硬盘上取下东西).在另一台机器上(通常表明问题),应用程序在几秒钟后得到改善,但与我的相比现在仍然缓慢.

[编辑 - 48小时后]在测试机器上,测试应用程序现在在运行48小时后完全没有响应(锁定).在同一台机器上,一个轻量级的"shell"WPF应用程序(包含一个选项卡控件,一些按钮和一些面板和网格)仍在运行并且响应速度非常快.因此,在这些更复杂的控件中出现的问题导致了这个问题......这确实指向可能是根本原因的(可能)触发器和委托.我将再次介绍应用程序/控件.与此同时,是否有人建议如何确保应用程序定期"清理"?因为我们在这里看第三方控件,所以我编辑它们的选项有限!

非常感谢可以提供的任何提示!

小智 2

尝试在软件模式下渲染wpf。

在加载事件中:

HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
Run Code Online (Sandbox Code Playgroud)