2008-12-15 102 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個單獨的按鈕,它將會爬行。另一方面,這些按鈕可以具有複雜的透明度和漸變,而不會造成顯着的性能影響。