Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Binding Overhead

Tags:

binding

wpf

I am learning about WPF. I have now come to binding. Does the binding rely on reflection when using INotifyPropertyChanged and is so, what is the price? I am considering using WPF for displaying data being streaming via UDP, but I fear that the overhead might be too great compared to WinForms.

like image 306
kasperhj Avatar asked May 25 '11 19:05

kasperhj


People also ask

How binding works in WPF?

Data binding is a mechanism in WPF applications that provides a simple and easy way for Windows Runtime apps to display and interact with data. In this mechanism, the management of data is entirely separated from the way data. Data binding allows the flow of data between UI elements and data object on user interface.

How many types of binding are there in WPF?

WPF binding offers four types of Binding. Remember, Binding runs on UI thread unless otherwise you specify it to run otherwise. OneWay: The target property will listen to the source property being changed and will update itself.

What is databinding in c#?

Data binding is the process that establishes a connection between the app UI and the data it displays. If the binding has the correct settings and the data provides the proper notifications, when the data changes its value, the elements that are bound to the data reflect changes automatically.

What is binding path in WPF?

Binding path syntax. Use the Path property to specify the source value you want to bind to: In the simplest case, the Path property value is the name of the property of the source object to use for the binding, such as Path=PropertyName . Subproperties of a property can be specified by a similar syntax as in C#.


2 Answers

Here's an MSDN article about it. This is a pretty common question I hear all the time.

But my thought is, unless you're running into a serious edge case scenario, you want to use binding in WPF. That's the way the whole system is designed.

like image 53
Tim Avatar answered Oct 15 '22 08:10

Tim


Performance of binding depends on the type of object being bound. Reflection isn't used with respect to INotifyPropertyChanged, but is when resolving CLR properties.

Microsoft has a great write up on this: "Optimizing Performance: Data Binding".

Key details related to performance:

If the source object is a CLR object and the source property is a CLR property, the Windows Presentation Foundation (WPF) data binding engine has to first use reflection on the source object ... This sequence of reflection operations is potentially very time-consuming from a performance perspective.

The second method for resolving object references involves a CLR source object that implements the INotifyPropertyChanged interface, and a source property that is a CLR property. In this case, the data binding engine uses reflection directly on the source type and gets the required property. This is still not the optimal method, but it will cost less in working set requirements than the first method.

The third method for resolving object references involves a source object that is a DependencyObject and a source property that is a DependencyProperty. In this case, the data binding engine does not need to use reflection. Instead, the property engine and the data binding engine together resolve the property reference independently. This is the optimal method for resolving object references used for data binding.

...

WPF allows you to data bind to XML content; however, data binding to XML content is slower than data binding to CLR objects. Do not convert CLR object data to XML if the only purpose is for data binding.

(emphasis added)

like image 43
CodeNaked Avatar answered Oct 15 '22 07:10

CodeNaked