2009-12-12 2 views
9

Sto sviluppando un'applicazione che utilizza WPF. L'app funziona a schermo intero e ho bisogno di ridimensionarlo in modo corretto, indipendentemente dalla risoluzione del monitor. Il grafico ha disegnato bellissime immagini per i pulsanti dell'interfaccia utente, gli sfondi, ecc. Usando un plug-in di Illustrator, tutte le immagini sono state convertite in file xaml. Ho aggiunto tutte queste immagini nell'applicazione e sono perfette. Sto anche utilizzando molti layout Grid in modo che lo schermo possa ridimensionare mantenendo il layout. Tutto ciò viene visualizzato come desiderato, nulla sembra allungato quando viene eseguito con una risoluzione diversa. Tuttavia, le transizioni dello schermo e l'interazione dell'interfaccia utente sono lente.WPF è la ragione per cui la mia applicazione è lenta?

Mi chiedo, è dovuto all'utilizzo intensivo della grafica? Sto usando troppi layout Grid? Ma ho bisogno del Grid s in modo da poter avere indipendenza dalla risoluzione.

L'applicazione funziona correttamente sulla mia macchina di sviluppo, ma è molto più lenta sulla macchina con minori prestazioni. Sì, è normale, ma non nella misura in cui sto vedendo. Il mio datore di lavoro insiste sul fatto che l'applicazione funzioni senza problemi su queste macchine con prestazioni inferiori.

Ho fatto un po 'di profilazione dell'applicazione e sembra che quello che impiega più tempo è la roba di visualizzazione (anche se non sono sicuro di comprendere appieno quanto sia efficace usare un profiler).

Se è il WPF a causare il rallentamento, cosa posso fare per migliorare questo?

+1

Non ne so abbastanza per scrivere una risposta reale, ma guarderei attentamente l'output del plugin illsutrator-to-xaml. Per lo meno, guarda come si comporta la tua app con elementi grafici segnaposto (ad es. Una griglia vuota). – Egor

risposta

10

È possibile eseguire il drill in quale attività WPF sta utilizzando il tempo massimo utilizzando Performance Profiling Tools for WPF. Supponendo che un carico grafico pesante stia causando il rallentamento, questo dovrebbe darti un aiuto su cosa potrebbe essere necessario semplificare (es. Layout) o rimosso (ad esempio effetti bitmap (questi sono un classico killer perf, anche se non voglio pregiudizi la tua profilazione!)).

6

Se è il WPF che sta causando il rallentamento

non

Probabilmente;)

E 'molto più probabile che sia il codice che provoca il rallentamento. WPF è potente, ma devi capire i concetti fondamentali per farlo funzionare bene ... Dovresti dare un'occhiata a this video da una sessione PDC, fornisce molti consigli su come rendere più rapida la tua applicazione WPF

+0

Link video non funziona più. –

+1

Questa sembra essere la posizione corrente per quel video: https://channel9.msdn.com/Events/PDC/PDC09/CL10 – TripleAntigen

2

WPF le prestazioni dipendono in gran parte dalla qualità della scheda video nella macchina più quella del processore/della memoria. Scheda video errata = cattiva prestazione WPF.

1

Beh, questo è un campo lungo: quando ho installato Visual Studio Team System 2010 (e utilizza WPF) è stato molto lento su un server Windows 2008 con sufficiente CPU/memoria, e molto veloce in modo più taccuino modesto. Siamo riusciti a disattivare l'accelerazione hardware ed è diventato notevolmente veloce in quella macchina.

Forse si vuole provare questa configurazione, in quanto è molto semplice: Visual Studio 2010 Beta 2 editor performance fix running on a virtual machine

+0

Interessante, mai visto DisableHWAcceleration utilizzato per accelerare WPF prima! – itowlson

+0

Questo mi ha fatto pensare troppo .. ma ho lavorato su VS2010, giuro =) http://stackoverflow.com/questions/1743525/can-i-and-how-do-i-target-net-4-with- vs-2008/1743556 # 1743556 –

4
  1. convertire le immagini XAML vettoriali di bottoni in trasparenti immagini PNG. Path e Shapes sono molto pesanti per il rendering, il calcolo e il ridimensionamento. Principalmente dopo la distribuzione, le immagini non cambiano mai meglio di averle come raster del vettore, a meno che non si desideri eseguire un'animazione fluida di forme, dimensioni o altri attributi.

  2. Le griglie sono gestori di layout molto costosi rispetto a Canvas, DockPanel. Si può certamente pensare di sostituire certe griglie con DockPanel a volte, ma sì, non è una soluzione facile, richiede molto brainstorming.

  3. Evita pannello con figlio singolo. Prova a ridurre la gerarchia visiva.

  4. Utilizzare più dimensioni fisse per pulsanti e elementi così piccoli, se si specificano le dimensioni fisse dei bambini, diventa facile per i pannelli eseguire l'elaborazione del layout.

+3

Le immagini PNG non vengono ridimensionate correttamente, ecco perché sono andato con i vettori. –

+2

Inoltre, come posso sviluppare un'app che modificherà il layout in modo che si adatti alla risoluzione dello schermo, a meno che non faccia affidamento su Grids? –

+0

Non tutte le immagini devono essere in PNG, ad esempio tutte le icone, dei pulsanti o come quella sui pulsanti Indietro/Avanti di IE, rimangono sempre uguali anche se si ridimensiona, tali pulsanti possono essere convertiti in PNG. Puoi utilizzare DockPanel anziché la griglia O utilizzare le dimensioni relative di colonna/riga anziché "Auto". Se riesci a mostrare un po 'lo schermo della tua app, posso suggerire alcuni passaggi migliori. –

0

In generale, WPF sta peggiorando molto in termini di prestazioni di disegno rispetto a Windows Form e GDI nativo o DirectX.

Sì, WPF è potente, nel senso che potresti creare alcune cose chiare che non sono supportate in GDI, ma è più lento.

Se si ha molto da fare e si desidera supportarlo su hardware lento, WPF non è una buona scelta.