WPF C#应用程序性能
本文关键字:性能 应用程序 WPF | 更新日期: 2023-09-27 18:20:04
我们有一个用.Net 4.0编写的C#WPF应用程序,它具有一些相对简单的数据绑定和网格功能。
造型包括一些"调整",包括一些悬停颜色等等
在3台机器上,在覆盖20台的部署中,我们遇到了一些非常奇怪的UI性能问题。
实际上,在重新启动后,应用程序运行良好,但在一定(未确定)的时间后,UI会变得异常缓慢。例如,将鼠标悬停在按钮上,在应用/渲染悬停颜色样式之前,将有长达几秒钟的延迟。
这些机器的规格几乎相同。图形驱动程序已经更新,标准设置是两个NVidia Quadro 290卡。此外,我们制作了一个"测试"应用程序,只包含一些测试UI组件(包括Fluent Ribbon),没有代码隐藏。问题仍然存在。
我运行了Windows Performance Suite来"深入研究"运行时WPF,非常奇怪的是,如果勾选了"禁用脏区域支持"选项,UI会恢复正常响应。我的理解是,如果有什么不同的话,这应该会进一步降低性能!!!
我不知道在这里还有什么可以尝试的。DotTrace性能分析表明,应用程序的大部分时间都花在PresentationFramework.dll中。
[EDIT]所有计算机都是Windows XP SP3。
[EDIT]这可能发生在所有机器上,并且通常不允许应用程序运行足够长的时间来出现问题。我们现在正在对此进行测试。
[EDIT]我还应该指出,我们正在试验此处详细介绍的修补程序。目前它已经安装在一台机器上,我会相应地更新。
[EDIT-24小时后]所以两台机器已经在一夜之间运行了相同的代码。在我的机器上(它从未证明过这个问题),在初次登录后,应用程序非常缓慢,但不到一分钟就恢复了正常。(我把它归结为机器显然是从硬盘上取下了东西)。在另一台机器上(通常证明了这个问题),几秒钟后应用程序有所改进,但与我的相比仍然缓慢。
[EDIT-48小时后]在测试机器上,测试应用程序在运行48小时后现在完全没有响应(锁定)。在同一台机器上,一个轻量级的"shell"WPF应用程序(包含一个选项卡控件、一些按钮、一些面板和网格)仍在运行,并且响应良好。因此,这些更复杂的控制中的某些东西导致了这个问题。。。这确实指向了可能是根本原因的(潜在的)触发器和委托。我将再次查看应用程序/控件的配置文件。同时,有人对如何确保应用程序定期"清理"有什么建议吗?因为我们在这里查看的是第三方控件,所以我编辑它们的选项有限!
如果能提供任何提示,我将不胜感激!
尝试在软件模式下渲染wpf。
在Loaded事件中:
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
在比较开发人员和用户机器之间的性能时,需要考虑的是加载WPF程序集所需的时间。
在开发机器上,您可能已经运行了visual studio,或者以前运行过其他WPF应用程序,并且在运行应用程序时,所有程序集都应该已经加载。
在用户机器上,可能是刚重新启动的,程序集将在应用程序启动时加载,这会使启动速度明显变慢。根据应用程序的设置方式,首次使用各种功能/页面时可能会加载其他程序集。
我发现EQUATEC探查器在调试这些性能问题时很有用。在构建项目之前,将应用程序选项中的配置文件更改为"完整的常规信息"将配置文件降低到绑定级别。