WPF性能问题。绑定?

时间:2013-06-11 18:20:07

标签: wpf performance binding

我们有一个5年前开始开发的财务应用程序。它是旧应用程序的迁移,主要目的是实现良好的用户界面。 由于UI考虑因素,所选择的技术是WPF。该应用程序仍然使用.Net版本3.5 SP1。 当前的应用程序是分层的,但业务逻辑和后端是不同的技术,它超出了我们的问题范围。 客户端不是传统的MVVM应用程序,但它混合了一些概念。

在简单场景中,以类型化数据集的形式从应用程序服务器检索数据。到客户端的数据集被映射到实现INotifyPropertyChanged接口的数据对象(PO​​CO),这些属性引发了PropertyChanged事件。 这些数据对象实际上绑定到UI,并且作为对用户交互的响应,执行一些路由命令,以便最终从服务器检索数据。 实现Active Record模式的变体,因此基本上从服务器接收的数据集中的每个表被映射到数据对象,来自表示来自表的列的数据对象的属性,数据对象实例表示来自表的行。 由于使用了WPF绑定,检索到的数据会自动显示在UI上。

问题是我们开始遇到性能问题。在从服务器检索数据后,它们有时会以不确定的方式出现。从数据集开始映射到更新UI之间存在延迟。 慢速机器上的这种延迟可能会持续几秒钟。 在功能强大的机器上,延迟似乎微不足道。此外,延迟不是恒定的,因此检索相同数据的UI有时会在几毫秒内更新,有时可能持续数秒。

我们认为我们已经隔离了问题,并且在绑定源(数据对象)具有许多属性(例如50)并且UI包含许多使用绑定的控件(文本框)的情况下使用绑定。 还使用不同的工具进行了一些测量。似乎没有内存泄漏。在更新参与绑定的数据对象的属性时,看到处理延迟。 似乎设置属性值的持续时间也取决于值本身(例如:更新十进制属性,零值更快,在绑定上使用或不使用转换器,测试也是在没有转换器和字符串的情况下进行的,属性值字符串“0”的更新速度比属性值“123.456.00”快得多。

基本上我们认为性能问题的一个主要部分是在UI上使用许多控件(例如:150个文本框)绑定到具有许多属性的对象(例如:50)。我们注意到,定位3.5版本比定位版本4.0或4.5要慢得多。 可以重现延迟,但它们并不是一直发生的。延迟会以指数方式逐渐增加或减少,例如从5毫秒增加到2秒,或者在非常慢的机器上增加或减少甚至长达数十秒。

我们怀疑性能问题(UI更新之前的延迟)与WPF技术和绑定机制有关,但尚未确认。

所以基本上我们不明白延迟出现的原因,为什么它们有时只出现(非确定性),如果它们是因为WPF绑定系统!

对此有任何帮助将不胜感激。谢谢。

0 个答案:

没有答案