Teljesítménnyel kapcsolatos szempontok és ajánlott eljárások
Ez a témakör a Desktop Window Manager (DWM) API-k használatának ajánlott eljárásait ismerteti.
Ez a témakör a következő szakaszokat tartalmazza:
- DWM- alkalmazásával kapcsolatos eljárások
- DWM- rajzi eljárásai
- DWM Blur-Behind ügyfélrégió
Alkalmazási eljárások a DWM-hez
Ha az alkalmazás kezeli a hüvelykenkénti (dpi) skálázást, deklarálhat egy alkalmazást dpi-tudatosként, és megakadályozhatja az automatikus skálázást a dpi-aware jelző beállításával a program jegyzékében, vagy meghívhatja a SetProcessDPIAware függvényt a program inicializálása során.
Ha a DWM-összeállítás be van kapcsolva, az elhomályosított alkalmazások már nem kapnak WM_PAINT üzeneteket, és nem kérnek újra renderelést. Minden ablak tartalma már elérhető a képernyő képének megírásához.
A felső szintű WS_EX_TRANSPARENT ablakokat WS_EX_LAYERED stílussal kell kombinálni a találattesztelés céljából. WS_EX_TRANSPARENT a klasszikus értelemben, átirányítás nélkül, hasznos a gyermekablakok esetében egy hierarchiában, az ablakok hierarchiájában, amelyek ugyanahhoz a szálhoz tartoznak, de nem alkalmas a felső szintű ablakok számára.
Formázott vagy kevert ablakok létrehozása régiók vagy rétegzés használatával. Vegye figyelembe, hogy a Windows Vista és az újabb Windows verziókban, ha csak egy felső szintű ablak egy részét rajzolja egyedileg, az nem eredményezi a kívánt elavult tartalmat a nem rajzolt területeken.
Az olyan API-k, mint a GetDCOrgEx, bizonyos tényleges értékek meghatározására használhatók. Ha egy átirányított ablakhoz eszközkörnyezet (DC) tartozik, a GetDCOrgEx által visszaadott forrás nem egyezik meg az ablak eredetével a képernyőn. Ehelyett a forrás lesz az ablak háttérpuffer felületének eredete: (0, 0).
Ha minden más sikertelen, tiltsa le az ablakmegjelenítést a DwmSetWindowAttribute függvény meghívásával.
Rajzi eljárások a DWM-hez
Ne rajzoljon közvetlenül az elsődleges megjelenítési felületre. Ezzel kényszeríti a DWM-et, hogy tiltsa le a kompozíciót, amíg az alkalmazás fel nem oldja az elsődleges eszközfelületet.
Annak kiértékelése, hogy az alkalmazásnak saját dupla pufferelést kell-e biztosítania. A DWM hatékonyan kettős pufferelést alkalmaz a tartalomnál, és egyetlen képkockában jeleníti meg az ablakot.
Kerülje a kijelző eszközkontextusból való olvasást vagy írást. Bár a DWM támogatja, a teljesítmény csökkenése miatt nem javasoljuk.
Kerülje a rajzolást a nem ügyfélterületen. Bár az alkalmazás elérheti ezt a területet, és a rajzolás támogatott a Microsoft Win32 API által, ennek eredményeként az ablak elveszítheti bármilyen üvegszegélyét.
Ne keverje össze a Windows Grafikus eszközillesztőt (GDI) és a Microsoft DirectX-et, hacsak nem fedik egymást. Ha keverésre van szükség, rajzolja a GDI-tartalmat egy DirectX-szoftverfelületre, és egyesítse őket, mielőtt megjeleníti a képernyőn, vagy rajzolja őket külön ablakokban.
A BitBlt vagy StretchBlt függvény használata a Windows GDI+ helyett a rajz megjelenítéséhez. A GDI+ egyszerre egy szkennelési vonalat renderel szoftveres rendereléssel. Ez villogást okozhat az alkalmazásokban.
DWM Blur-Behind ügyfélrégió
Az elmosódott effektus renderelése erőforrás-igényes művelet mind a PROCESSZOR, mind a grafikus feldolgozó egység (GPU) számára. Az alkalmazásfejlesztőknek érdemes megfontolni az ügyfélterület elmosódásának következményeit, hogy ne használjanak túlzott erőforrásokat. A következő esetekben különösen körültekintően kell eljárnia:
- Ha arra számít, hogy az ügyfélterület elmosódottsága jelentős lesz, még akkor is, ha a homályos területen nem történik frissítés. Az elmosódást renderelni kell, ha az ablak elmosódott területén bármilyen frissítés történik, ami processzor- és GPU-költségeket okoz. Emellett az ablakon végzett műveletek (áthelyezés/átméretezés/áttűnések) több költséggel járnak.
- Amikor jelentős frissítésekre számít a homályos ügyfélterületen. Ehhez minden frissítésen át kell festeni az elmosódást, és túl sok erőforrást kell használnia.
- Ha az elmosódás várhatóan jelentős területet fed le, és az adott területre vonatkozó frissítések is várhatók, határozottan javasoljuk, hogy ne homályosítsa el az ügyfélterületet.