【发布时间】:2011-07-29 15:55:24
【问题描述】:
下午好,
我目前正在分析一个相当大的 C# WPF 应用程序,试图消除一些性能问题。一个涉及在切换到特定(相当大的)用户控件时发生 5-8 秒的停顿。我已将其缩小为包含在此 UserControl 中的 RadGridView,它需要很长时间来加载和更新自身,从而使 UI 线程停滞并使整个应用程序无响应。显然,如果可能的话,我们希望消除这个停顿。
我已经尝试剥离网格上的任何自定义样式和 DataTriggers,但是虽然这通常可以减少 UI 线程上的负载,但停滞仍然存在,似乎没有减少。通过 ANTS Profiler,似乎主要归咎于网格的测量和布局,以及一些 XAML 模板的加载。在没有网格行的情况下,UserControls 加载速度明显更快,而且似乎只添加少量行就足以导致这种停滞。网格为行和列启用了虚拟化,但这似乎没有帮助。检查时调用图非常深,似乎是引发更新通知、更新布局、加载 XAML 以及最重要的是测量应归咎于子 FrameworkElements 的调用。
对于几个潜在的解决方案,我正在考虑将 UserControl 保留在内存中但隐藏起来以减少切换到它的成本,或者填充网格,也许是在 UserControl 加载之后很久。前者可能需要做很多工作,因为控件订阅了许多东西,需要根据需要连接、断开连接和重新连接。后者也可能涉及大量工作,但可能是一个更好的解决方案,因为这样至少我们可以尝试自己减轻停顿,或者至少在发生时警告用户。
如果问题仍然存在,我们可能会要求 Telerik 看看它,但我想我会先在这里问一下,以防之前有人遇到过这样的问题(甚至不一定是 RadGridView)并发现一些描述的解决方案。
干杯。
【问题讨论】:
-
这是 Telerik WPF 控件和特别是 RadGridView 的普遍问题。它们的滚动速度非常快(.NET 4 WPF 内置的 Datagrid 在这方面很糟糕)、内置过滤等......但是它们的负载海岸非常糟糕,无法减少。看看他们的 WPF 演示:在相当现代的 PC 上加载每个需要 3-4 秒。我已经放弃了。
标签: asp.net wpf performance telerik-grid