2008-12-15 84 views
15

由于XAML被编译,所以这样的代码执行应该没有区别。
的WinForms(代码等):Winforms和WPF的性能比较

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

XAML中没有得到在运行时解析,因为我以为... :-)

但有关呈现的大单/执行有很大的控制呢? 哪种技术更快?

回答

20

哪种技术是更快?恐怕你的问题并没有一个简单的答案。

您对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进一步提前(假设现在稍微有点......对于某些场景......有时候)。所以我想答案是“这取决于”。

+0

由于WPF的稀疏存储基础设施,WPF对象往往是轻量级的。只有在依赖属性值与默认值不同时才会存储相关属性值,因此可以节省大量内存。 – 2008-12-15 14:23:19

6

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

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

如何决定选择WPF还是Winforms在很大程度上取决于其他因素 - 您在UI中需要的灵活性,您的应用程序需要多少媒体支持等。WPF不是Winforms的替代品 - 它并不是所有问题的灵丹妙药。

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

我读了一些有趣的博客ealier。

John's Post

Rob's Post

3

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