Megosztás a következőn keresztül:


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:

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.