2009-12-12 163 views
9

我正在開發一個使用WPF的應用程序。該應用程序運行全屏,無論顯示器分辨率如何,我都需要它來調整大小。平面設計師爲UI按鈕,背景等設計了精美的圖像。使用Illustrator插件,所有圖像都被轉換爲xaml文件。我已將所有這些圖像添加到應用程序中,並且它們看起來很棒。我也使用了很多Grid佈局,以便屏幕可以調整大小,同時仍然保持佈局。所有這些都是按照需要顯示的,當以不同的分辨率運行時,沒有什麼看起來被拉伸。但是,屏幕轉換和UI交互速度很慢。WPF是我的應用程序很慢的原因嗎?

我想知道,這是由於大量使用圖形?我是否使用太多Grid佈局?但是,我需要Grid,這樣我才能擁有解決方案的獨立性。

該應用程序在我的開發機器上運行良好,但在性能較低的機器上運行速度非常慢。是的,這是可以預料的,但不是我所看到的程度。我的僱主堅持應用程序在這些性能較低的機器上運行平穩。

我已經做了一些應用程序的分析,它似乎最需要的是顯示的東西(儘管我不確定我完全理解如何有效地使用探查器)。

如果是導致放緩的WPF,我該怎麼做才能改善這種情況?

+1

不知道寫出一個真正的答案,但我會仔細看看illsutrator-to-xaml插件的輸出。至少看看你的應用使用佔位符圖形元素(例如,空網格)的行爲。 – Egor 2009-12-12 01:23:23

回答

10

您可以使用Performance Profiling Tools for WPF深入瞭解哪些WPF活動正在使用時間。假設一個沉重的圖形負載導致放緩,這應該給你一些幫助,可能需要簡化(如佈局)或刪除(例如位圖效果(這是一個典型的全能殺手,雖然我不想偏見你的分析!))。

6

如果是導致經濟放緩

可能不是WPF)

這是更可能的是它是代碼導致經濟放緩。 WPF功能強大,但您必須瞭解核心概念才能使其運行良好...您應該從PDC會話中看到this video,它提供了許多有關如何更快地創建WPF應用程序的建議

+0

視頻鏈接不再有效。 – 2015-05-10 01:25:52

+1

這似乎是該視頻的當前位置:https://channel9.msdn.com/Events/PDC/PDC09/CL10 – TripleAntigen 2016-04-25 02:03:09

2

WPF性能在很大程度上取決於機器中視頻卡的質量,而非處理器/內存。壞視頻卡=糟糕的WPF性能。

1

好了,這是一個遠投:當我安裝VSTS 2010(它使用WPF)這是有足夠的CPU /內存在Windows 2008服務器上很慢,更非常快速謙虛的筆記本。我們設法禁用了硬件加速,並且它變得非常快速地進入該機器。

或許你想嘗試這種配置,因爲它是非常簡單的:Visual Studio 2010 Beta 2 editor performance fix running on a virtual machine

+0

有趣的,從來沒有見過DisableHWAcceleration用於加速WPF之前! – itowlson 2009-12-12 01:10:51

+0

這讓我覺得太..但在VS2010工作,我發誓=) http://stackoverflow.com/questions/1743525/can-i-and-how-do-i-target-net-4-with- vs-2008/1743556#1743556 – 2009-12-12 01:21:02

4
  1. 轉換按鈕,您的XAML矢量圖像進入透明PNG圖像。路徑和形狀非常沉重,渲染,計算和調整大小。大多數情況下,在部署之後,除非要執行更改形狀,大小或其他屬性的平滑動畫,否則圖像永遠不會更改爲將其更改爲光柵和矢量。

  2. 與Canvas,DockPanel相比,網格是非常昂貴的佈局管理器。你當然可以考慮用DockPanel替換某些網格,但是這不是一個簡單的解決方案,它需要大量的頭腦風暴。

  3. 避免面板與單個孩子。儘量減少可視化層次結構。

  4. 如果您指定固定大小的子項,則可以使用更多固定大小的按鈕和小元素,Panels可以輕鬆進行佈局處理。

+3

PNG圖像不會很好地調整大小,這就是爲什麼我已經與向量。 – 2009-12-14 17:51:36

+2

另外,除非我依賴網格,否則我該如何開發一款應用程序來調整佈局以適應屏幕分辨率? – 2009-12-14 20:24:11

+0

並非所有圖像都需要PNG格式,例如按鈕的所有圖標,或者類似於IE的後退/前進按鈕上的圖像,即使調整大小,它們也總是保持不變,這些按鈕可以轉換爲PNG格式。您可以使用DockPanel而不是網格,或者使用相對的列/行大小而不是「自動」。如果你可以稍微顯示你的應用程序的屏幕,我可以提出一些更好的步驟。 – 2009-12-15 08:15:31

0

一般來說,WPF的繪製性能比Windows窗體,本地GDI或DirectX的性能差得多。

是的,從某種意義上講,WPF很強大,你可能會做出一些GDI中不支持的整潔東西,但它更加緩慢。

如果你有很多繪圖工作要做,並且你想在慢速硬件上支持它,那麼WPF並不是一個好的選擇。

相關問題