Disabilitare Aero programmaticamente per incrementare le performance di WPF

di Cristian Civera, in Windows Presentation Foundation,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi