Winforms和WPF的性能比较

时间:2008-12-15 13:35:59

标签: wpf winforms xaml

由于XAML被编译,因此执行代码应该没有区别。
Winforms(类似代码):

Form formPeter = new Form();
Textbox textbox = new Textbox();
Label l1 = new Label1();

Xaml在运行时没有被解析,因为我认为...... :-)

但是如何使用大量控件渲染/执行大型表单呢? 哪种技术更快?

4 个答案:

答案 0 :(得分:21)

哪种技术更快?我担心你的问题没有一个简单的答案。

关于未在运行时解析XAML的评论既是真的也是假的。虽然未对XAML进行解析,但在运行时会解析其标准化的二进制版本(作为应用程序中的资源嵌入),称为BAML 。要说DirectX比GDI更快也是一种简化 - 基于WPF和GDI的渲染技术只具有不同的性能特征。例如,WPF使用保留的渲染模式,而WinForms和其他基于GDI的技术则不使用。 WPF对象的重量往往更重,因为它们比winforms对象支持更多的属性。我们有几十年的知识,如何使GDI变得非常快,而且只有相对较短的时间使用WPF和XAML。

WPF对于编写应用程序来说足够快,但您需要时刻警惕您的元素数量不会爆炸(例如,通过创建过于复杂的模板,然后在UI中重复数百或数千次) 。此外,WPF在不同的图形硬件上执行不同的操作(因为它在内部调用DirectX)。在WPF中2D内容应该没问题,即使它完全用软件渲染(比如它在虚拟机上的渲染方式),但是具有大量元素的动画,抗锯齿3D需要真正的GPU能力。随着时间的推移,图形硬件变得越来越强大和流行,并且关于如何改进性能调整WPF的知识得到改进,我们应该看到WPF进一步提前(假设现在稍微有点......对于某些场景......有时候)。所以我猜答案是“它取决于”。

答案 1 :(得分:6)

WPF使用DirectX进行渲染(速度更快),而不是本机Windows GDI。

您可能已经知道,Native GDI是基于位图的。由于WPF是基于矢量的,因此与GDI相比,WPF可以更好地利用硬件支持。

然而,选择WPF或Winforms的决定在很大程度上取决于其他因素 - UI中需要的灵活性,应用程序需要多少媒体支持等等.WPF不是Winforms的替代品 - 它是对于所有问题都不是银弹。

随着更多硬件加速功能的推出,WPF可以提供比Winform应用程序更好的功能。

我读过几篇有趣的博客。

John's Post

Rob's Post

答案 2 :(得分:3)

WPF绘图速度更快,但对象更重。如果你扔掉1000个单独的按钮,它将会爬行。另一方面,这些按钮可以具有复杂的透明度和渐变,而不会显着影响性能。

答案 3 :(得分:1)

WPF与Winforms的性能不再是主要标准。

我知道以前曾问过这个问题,但是鉴于.NET 4.x以及为使WPF更具性能而进行的改进,社区是否认为性能不再是选择一种技术而不是另一种技术的标准?

由于WPF与WinForms相比具有以下几种架构优势,因此在需要复杂的UI,自定义样式和图形密集型方案的情况下,整体WPF桌面应用程序的性能要明显优于等效的WinForms代码:

  • 更好地使用GPU
  • 保留模式呈现
  • 更有效的数据绑定更有效的对象树构建
  • 更有效地使用RAM(使用DependencyObject)
  • 较小的程序代码

但是,两者的执行速度都足够快,以至于我认为性能不是选择WPF而不是WinForms的主要原因。它将能够更快地创建更好的应用程序。

游戏开发人员和其他需要最终性能的人不会在其UI的关键部分使用WPF或WinForms:他们将使用Direct3D甚至是硬件进行编程。

This article描述了平台(UWP,WPF和Windows窗体),并帮助您确定最适合您的应用程序的平台。

对于Winforms单元测试,您要做的第一件事是确保将业务逻辑与表单正确分开。基本上,使用MVC模式。然后,您可以轻松地测试表单之外的所有内容,就好像表单甚至不存在一样。