If you have a lot of binding errors, then those split seconds start to add up.

Make sure to go through your bindings, especially those on Items Controls (List Views, custom grids, etc.) and verify that there are no binding errors.

There is no shortage of information out there on how to speed up the performance of WPF applications, but too often the focus is on the weird stuff instead of the simpler issues.

I’m not going to talk about things like writing to to optimize drawing—it’s a topic covered to death elsewhere.

Finally, there are old UI/Win Forms problems (this, this, and this) that never really went away—they’re just less likely to happen.

Every time a binding error occurs, your app hangs for just a split second as it writes out errors to the trace log.

And always set specific widths on columns in a grid (be it a List View Grid View or any third-party control), because these tend to be very expensive, especially with larger data sets.

Grouping in WPF doesn’t perform terribly well, especially with List Views and Grid Views.

Then there are some problems (like this and this) where WPF leaks for you too.

Finally, there are things (this, this, this, this, this, and this) that simply perform worse than you likely expect.

For example, if you have a Person View Model class with a property that you want to group by (let’s say Region), it is faster to create a mixed collection of My Group View Model and Person View Model objects, ordered correctly by group, with different Data Templates, than it is to bind to a grouped collection. And worse, once you start nesting Dynamic Resources (for example, a List View whose Style contains a Control Template that references objects through Dynamic Resources), you’re likely to run into situations where you leak controls.