我正在学习WPF。现在我来到了绑定的部分。当使用 INotifyPropertyChanged 时,绑定是否依赖于反射?如果是,代价是什么?我正在考虑使用WPF来显示通过UDP流传输的数据,但我担心相比WinForms,开销可能会太大。
绑定性能取决于要绑定的对象类型。在解析CLR属性时,不使用反射来处理INotifyPropertyChanged。Microsoft在这方面有很好的写作:“优化性能:数据绑定”。与性能相关的关键细节:如果源对象是CLR对象且源属性是CLR属性,则WPF数据绑定引擎首先必须对源对象使用反射...从性能角度来看,这个反射操作序列可能非常耗费时间。解析对象引用的第二种方法涉及实现了INotifyPropertyChanged接口的CLR源对象和CLR属性的源属性。在这种情况下,数据绑定引擎直接在源类型上使用反射并获取所需属性。这仍然不是最佳方法,但比第一种方法的工作集成本要低。解析对象引用的第三种方法涉及源对象为DependencyObject且源属性为DependencyProperty。在这种情况下,数据绑定引擎不需要使用反射。相反,属性引擎和数据绑定引擎共同独立解析属性引用。这是用于数据绑定的解析对象引用的最佳方法。WPF允许您将数据绑定到XML内容;但是,与数据绑定到CLR对象相比,数据绑定到XML内容较慢。如果唯一目的是数据绑定,请勿将CLR对象数据转换为XML。