Performance improvements in WPF in .Net 3.5 / 3.0 SP1
Below is a list of the performance improvements that you can expect to see in WPF in .Net 3.5 and .Net 3.0 SP1:
**1. ** Animations Smoothing Improvements
- WPF Animation in .Net 3.0 SP1 is much smother.
- These improvements are more noticeable on Vista and especially in upcoming Vista SP1, which includes additional smoothing in the Desktop Windowing Manager (DWM).
**2. ** Layered Windows Improvements
Layered Window performance was one of top customer complaints. They are now addressed with a QFE/Hotfix.
These hotfixes are not available for direct download. End users should call Microsoft PSS to obtain them.
Developers and OEMs can contact Microsoft PSS to discuss redistribution rights.
The hotfixes will be included in the next service pack of Microsoft OS’s
For Windows Vista:
§ Hotfix is forthcoming in Vista SP1 (fixes are in milcore.dll)
• The Hotfix improves the read-back of video memory to system memory and therefore the degree of noticeable improvements will depend on certain machine characteristics, such as the video bus speed, the video bus type (e.g. expect better performance on PCIe vs. AGP bus), etc
For Windows XP/Server 2003:
§ Layered Windows was rendered in software, which had performance issues. The hotfix addresses this. On XP layered windows will render using hardware acceleration (if the hardware supports it). If so, you should be able to see significant performance improvement with this hotfix.
§ See https://support.microsoft.com/kb/937106/en-us. (fixes are in d3d9.dll)
§ Hotfix is slated in the upcoming Windows XP SP3
Other Layered Window improvements:
.Net 3.0 SP1 fixes a performance issue that is related to user switching.
A Layered window app running under another user profile caused higher CPU usage. This is now fixed for both XP & Vista.
**3. ** Data binding Improvements.
Improvements should be noticeable in applications that bind to an XML source.
This improvement mainly relates to how WPF reacts to changes in the XML source tree.
**4. ** Coldstart time
We made small incremental improvements to cold and warm startup time.
**5. ** Working set / Runtime Improvements
We made incremental improvements to working set and hit testing under certain scenarios.
**6. ** New Software rendering API
As reported (see here), depending on the machine configuration and the application, software-based rendering is sometimes faster than hardware.
A new API is now available to allow developers to force software rendering in his/her application (per window) instead of using the GPU.
This should provide developers a much better alternative than setting the global ‘Disable HW Acceleration’ registry key (
Here is an example on how one can use this API.
private void OnLoaded(object sender, EventArgs e)
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
// this is the new WPF API to force render mode.
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
This could improve rendering performance for certain scenarios and machines configuration, in most cases HW rendering should perform better. Please use carefully and verify with your app and machine configuration
**7. ** Other notable Graphics perf improvements
- 3D hit testing is up to 50% faster in common scenarios of invertible transform. If the user only has one of the two Materials set we don’t hit test half of the mesh.
- Fixed RenderTargetBitmap memory leaks which could caused crash in rare scenarios.
**8. ** Battery life improvement
- In certain Animation scenarios when DecelerationRatio / AccelerationRatio are used, the animation clock may continue ticking. This may cause additional (small) CPU activity that may be the cause for the battery results you are seeing.
This is addressed in WPF 3.0 Sp1.
It is important to note that the app developer can work around this issue by:
· Not using DecelerationRatio / AccelerationRatio in the app, or
· Explicitly stopping the animation clock.
- We integrated the WPF 3.0 Power Consumption QFE/Hotfix and it is now in WPF 3.0 SP1.