#151 - Disabilitare Aero programmaticamente per incrementare le performance di WPF
di Cristian Civera, in Windows Presentation Foundation, 27 novembre 2009
Windows Presentation Foundation è un motore per la realizzazione di interfacce grafiche innovative che basa tutto il meccanismo di rendering sulle DirectX, API sviluppate da Microsoft ad alte prestazioni che sfruttano la GPU per i calcoli tridimensionali, il buffering e il drawing.
Queste API fino all'uscita di Windows Vista venivano sfruttate solo per video giochi o software per il disegno, ma con l'avvento di questo sistema operativo sono state integrate nell'interfaccia base dell'intero Windows: la shell. Lo scopo è quello di sfruttare le capacità della scheda video per migliorare la qualità e l'esperienza dell'utente, con effetti, animazioni e buffering del rendering di ogni finestra, racchiuse sotto il nome di Aero.
Ovviamente tutto questo ha un costo che si ripercuote sulla scheda video, rubando un po' delle sue capacità sia in termini di calcolo che di memoria, i quali vengono tolti dall'eventuale applicazione WPF in esecuzione.
E' possibile però guadagnare un po' nelle prestazioni disabilitando il Desktop Windows Manager (DWM) regredendo l'intera shell ad un'interfaccia più povera, dando maggior potenza al nostro applicativo. Per farlo occorre chiamare la funzione DwmEnableComposition contenuta nella DLL dwmapi.dll. Nella propria applicazione occorre quindi far altro che invocare tale funzione mediante pinvoke quando lo si ritiene necessario (per esempio quando si va in fullscreen):
const uint DWM_EC_DISABLECOMPOSITION = 0; const uint DWM_EC_ENABLECOMPOSITION = 1; [DllImport("dwmapi.dll", EntryPoint = "DwmEnableComposition")] static extern uint DwmEnableComposition(uint compositionAction); void SetDwmComposition(bool enabled) { DwmEnableComposition((enabled) ? WM_EC_ENABLECOMPOSITION : DWM_EC_DISABLECOMPOSITION); }
Una volta disattivato il DWM, questo verrà ripristinato solo quando tutti i processi, che ne hanno chiesto la disattivazione, vengono terminati.
Per maggiori informazioni:
http://msdn.microsoft.com/en-us/library/aa969510(VS.85).aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
-
Utilizzare Entity SQL per eseguire query in Entity Framework
-
#177 - Gestire gli errori dei WCF Data Services
-
#143 - Forzare la modalità di rendering software nelle applicazioni WPF
-
#195 - Abilitare il supporto a JSONP con WCF 4.0
-
#141 - Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
-
Quando il DOM è molto meglio di jQuery
-
Oltre il database, da Bing a Twitter: i provider per LINQ per ogni esigenza
-
Real Code Day 4.0: iscrizioni chiuse un mese prima e preparativi
-
#179 - Copiare uno Stream con il .NET Framework 4.0
-
#win7 su msdn downloads http://u.aspitalia.com/c
-
#153 - Invocare servizi WCF da Javascript
-
#1023 - ViewStateMode in ASP.NET 4.0: come controllare il ViewState

Commenti
mi piace
non mi piace
Facebook
Twitter










