Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az útmutató bemutatja, hogyan javíthatja a Windows-alkalmazás teljesítményét két elsődleges módon:
Memóriahasználat minimalizálása
A Windows-alkalmazás által használt memória mennyiségének csökkentésére többféle módon is lehetőség van:
- Csökkentse az előtérben levő memóriahasználatot
- Háttérmunka minimalizálása
- Erőforrások felszabadítása a háttérben
- Győződjön meg arról, hogy az alkalmazás nem szivárog ki a memóriából
A memóriahasználat megfelelő minimalizálása érdekében először fontos megérteni:
- a memória használatának és lefoglalásának módját a munkakészlet, a dinamikus memória és a virtuális lefoglalás használatával,
- rendszerkövetés rögzítése, és
- hogyan elemezheti a rendszer nyomkövetését.
Miután rendelkezik egy elemezendő rendszerkövetéssel, útmutatást fogunk javasolni a nyomkövetési elemzés alkalmazásához a memóriahasználat csökkentése érdekében.
Munkakészlet, dinamikus memória és virtuális memória kiosztás
Az alkalmazás munkakészlete – a virtuális címtérben található, jelenleg memóriában lévő lapok készlete – az alkalmazás memóriahasználatának egyik mértéke.
Az alkalmazás által használt memória mennyisége hatással van a futtatókörnyezet teljesítményére, valamint a rendszer egészének válaszképességére. A memóriahasználat minimalizálása segít az alkalmazásnak a jobb teljesítményben azáltal, hogy csökkenti a több memória eléréséhez kapcsolódó CPU-költségeket. Az alacsonyabb memóriahasználat a rendszer válaszkészségében és az alkalmazás felhasználói élményében is segít, mivel az alkalmazás nem zár ki más memóriatartalmat.
A memóriakiszorítás akkor fordulhat elő, ha a rendszer megkísérli megőrizni a közelmúltban elért memóriabeli tartalmat, és szükség esetén a korábban használt tartalmat levágja és fellapozza. Amikor a felhasználó visszavált a parancsértelmezőre vagy egy másik alkalmazásra, és a szükséges adatok nincsenek a memóriában, az adatokat be kell olvasni a lemezről. A felhasználó valószínűleg lassulást fog tapasztalni a folyamat miatt.
Az alkalmazás két kulcsfontosságú elemet használ a memóriában: 1) dinamikus memóriát és 2) fájlalapú memóriát. A fájlalapú memóriahasználat bináris fájlokból és adatfájlokból, például adatbázisokból származik, amelyeket egy alkalmazás használ. Ez általában nem egy alkalmazás memóriahasználatának jelentős része, és gyakran állandó. (Kivételek lehetnek az adatfeldolgozási alkalmazások, kódfordítás stb.) A memóriahasználat jelentősebb forrása, és ahol a szivárgások nyilvánulnak, a dinamikus memória.
A dinamikus memória egy alkalmazás által memóriafoglalási rutinokkal lefoglalt virtuális memóriának felel meg. A rendszer újraindítása során megmaradó fájlalapú memóriával ellentétben a dinamikus memória csak az alkalmazás teljes élettartama alatt létezik. A dinamikus memória gyakran jelentős memóriahasználati forrás, és ahol a memóriavesztések nyilvánulnak meg.
A virtuális foglalási rutinok (VirtualAlloc) a memórialefoglaláshoz használt alkalmazásréteg-rutintól függetlenül kezelik a Windows-alkalmazások memórialefoglalási kéréseit. Bár az alkalmazás által lefoglalt memória nem feltétlenül állandó a memóriában, az ilyen lefoglalások elemzése egységes módot biztosít az alkalmazások memóriahasználatának megértésére.
Az alkalmazás memóriahasználatának megértéséhez és a fejlesztésekhez használt helyek megkereséséhez javasoljuk, hogy rögzítsen egy VirtualAllocation-nyomkövetést az alábbiak szerint.
Rendszerkövetés rögzítése a memóriahasználat elemzéséhez
Az eszköztevékenységek időalapú rögzítését rendszerkövetésnek nevezzük. A rendszerkövetés létrehoz egy nyomkövetési fájlt, amely jelentés létrehozásához használható, és segít azonosítani, hogyan javítható az alkalmazás teljesítménye.
A nyomkövetések hossza eltérő lehet:
- Egy alkalmazás indításának rögzítéséhez rövid futó nyomkövetés használható. Ez magában foglalhatja az alkalmazás inaktív állapotra való áttérését, ahol az alkalmazás ablaka minimálisra csökken, vagy az alkalmazásablakok bezárulnak, amíg az alkalmazásfolyamat megmarad.
- A hosszú ideig futó nyomkövetés, általában több perc hosszúságú, hasznos a memóriavesztés diagnosztizálásában. Ha a memóriahasználat az idő múlásával folyamatosan növekszik, ez általában szivárgásra utal.
A memóriahasználat monitorozására több eszköz is rendelkezésre áll, többek között a következőkre:
A cikk alkalmazásában a Windows Teljesítményelemző használatára összpontosítunk. Ha többet szeretne megtudni az alkalmazás teljesítményének profilkészítéséhez szükséges eszköz kiválasztásáról, olvassa el a Visual Studio Performance Profiler, a Windows Performance Toolkit és a PerfView közötti választás című témakört.
Nyomkövetés rögzítése:
Nyisson meg egy parancssort (PowerShell vagy parancssor) rendszergazda módban. (Ha nem rendszergazdai módban fut, hibaüzenet jelenhet meg: 0xc5585011: "Nem sikerült engedélyezni a szabályzatot a rendszer teljesítményének profilkészítéséhez.")
Adja meg a parancsot:
wpr -start VirtualAllocation -filemodeFuttassa a vizsgált forgatókönyvet. (Például az alkalmazás elindítása.)
Adja meg a parancsot:
wpr -stop Trace.etl
A rendszer nyomkövetésének elemzése
Ahhoz, hogy megállapíthassa, hogy az alkalmazás melyik függvénye rendelkezik olyan memóriával, amelyet csökkentheti, elemeznie kell a rögzített rendszerkövetést. A nyomkövetés elemzése:
Nyissa meg a nyomkövetést a Windows Teljesítményelemzővel a parancs beírásával:
wpa.exe Trace.etlA Graph Explorer ablakban bontsa ki a Memória szakaszt, kattintson a jobb gombbal a Véglegesítés összesen gráfra, és válassza a Gráf hozzáadása új elemzési nézethez lehetőséget.
Nyissa meg a Nézetszerkesztőt a Beállítások fogaskerékre kattintva, és válassza a következő oszlopelrendezést: Folyamat, Véglegesítés típusa, Véglegesítési verem és Méret.
Kattintson a Méret oszlop fejlécére, hogy az eredmények csökkenő sorrendben legyenek rendezve. A Véglegesítési verem a lefoglalt memóriához vezető kód elérési útját jeleníti meg. Ezek az eredmények segíthetnek megérteni a kiosztás okát. A méret szerinti rendezéssel a nagyobb foglalásokra összpontosíthat, és megvizsgálhatja, hogy van-e lehetőség az optimalizálásra.
Szűrjön az elemezni kívánt folyamat(ok)ra, kattintson a jobb gombbal a folyamatra, és válassza a Szűrés kijelölésre lehetőséget.
Ha a nézetbe szeretné nagyítani a kívánt régiót, jelöljön ki egy tartományt, kattintson a jobb gombbal a gráfra, és válassza a Nagyítás lehetőséget.
A Commit Stack segítségével megértheti, hogy mely függvények osztanak ki memóriát. A véglegesítési veremekbe be kell tölteni a szimbólumokat. Szimbólumok betöltéséhez válassza a Nyomkövetés>Szimbólumok betöltése a felső navigációs menüsávon.
A nyomkövetési elemzés alkalmazása a memóriahasználat csökkentésére
A lefoglalt memória elemzése során nyomokat talál, amelyek segítenek eldönteni, hogy hol lehet minimalizálni a memóriahasználatot.
Néhány szempont, amelyeket figyelembe kell venni a nyomkövetési elemzés alkalmazásával kapcsolatban a kód frissítésére a memóriahasználat csökkentése érdekében:
A memóriahasználat csökkentése az előtérben: A memóriakövetés elemzése segíthet azonosítani az előtérben lévő szükségtelen memóriahasználatot, és frissíteni a kódot a használat csökkentése vagy eltávolítása érdekében.
A munka minimalizálása a háttérben: A rendszer szabályzatokkal rendelkezik a folyamat munkakészleteiből származó lapok korosítására. Ha kevesebb memóriát használ a háttérben, azzal hatékonyabbá teszi a rendszert azáltal, hogy kevesebb memóriát tárol az alkalmazás memóriájában. További információ arról, hogyan javíthatja az energiafogyasztás és az akkumulátor élettartamát a háttérmunka minimalizálásával, ami azt is jelenti, hogy kevesebb memóriahasználatot használ a háttérben.
Erőforrások felszabadítása a háttérben: Futtatókörnyezetben az alkalmazások memória-gyorsítótárakat hozhatnak létre, valamint grafikus lefoglalásokat hozhatnak létre a felhasználói felület támogatásához. Ezek a kiosztások felszabadíthatók, ha az alkalmazás kis méretű vagy nem látható. Az alkalmazások regisztrálhatnak alacsony memóriahasználatú értesítésekre az ilyen műveletek végrehajtásához, de jobb stratégia lehet a memória felszabadítása egy használaton kívüli időszak után, amikor az alkalmazás megállapítja, hogy inaktív. Ez a használatkivételi időszak alkalmazásonként változhat, így az inaktív használat lehetséges mutatói néhány perctől másfél óráig vagy több óráig terjedhetnek. Ügyelni kell az ilyen típusú memóriamegtakarítás és a válaszkészség egyensúlyára. Ha egy gyorsítótár újraépítése költséges, az alkalmazás dönthet úgy, hogy megtartja azt az alkalmazás teljes élettartama alatt.
Győződjön meg arról, hogy az alkalmazás nem szivárog ki memória: A memóriaszivárgások ellenőrzéséhez először hozzon létre egy állandósult állapotú teljesítménytesztet, ahol az alkalmazás memóriahasználati lemezei vagy nem növekednek egy bizonyos értéknél. Ezt az állandó állapotot úgy hozhatja létre, hogy folyamatosan használja az alkalmazást, vagy tétlenül hagyja a háttérben. A rögzített nyomkövetéssel azonosíthatja a lehetséges memóriaszivárgást, és megtalálhatja, hogy hol van lefoglalva a memória a kódban, és hogyan szabadíthatja fel azt, miután a rendszer betöltötte a célját. Ha a memória folyamatosan növekszik az alkalmazás futása közben, ez valószínűleg memóriaszivárgásra utal. Nagyítsa ki a nyomkövetésben lévő növekedésnek megfelelő régiót, és gondosan elemezze az előzményhalmazokat.
Lemezterület hatékony használata
A lemez lábnyoma egy alkalmazás méretét jelenti, ha inaktív állapotban van tárolva (nem kódot hajt végre). Ha az alkalmazás sok lemezterületet foglal el, az optimalizálás lehetősége is lehet.
Az alkalmazás lemezigényének csökkentése számos módon javíthatja a teljesítményt:
Amikor a lemez megtelik, a fájlrendszer nem képes többé egybefüggő módon tárolni az új tartalmakat. A teljes lemez töredezetté válik, és új tartalmakat tárol a nem összefüggő ágazatokban. Ez hosszabb késési időt jelent, amikor a tartalom a lemezről érhető el. Az IO-rendszerek sokkal jobb lemezteljesítményt biztosítanak, ha a tartalom egybefüggő, és egymás után, vagy nagyobb IOS-ek használatával érhető el.
A teljes lemez hosszabb írási késéseket okozhat az SSD-alapú rendszerek esetében. Ha kevesebb üres cella van az írások elnyeléséhez, az írás olvasási-módosítási-írási művelettel járhat, ami lelassítja a teljesítményt.
A teljes lemez akadályozhatja az alkalmazás frissítését. Bár az operációs rendszer rugalmas, és képes naprakészen tartani a rendszert, még alacsony rendelkezésre állású lemezterület esetén is, az alkalmazásfrissítés tartalmának átmeneti tárolásához megfelelő mennyiségű rendelkezésre álló lemezterület gyorsabb és zökkenőmentesebb frissítési élményt eredményez.
Ha jelentős mennyiségű lemezterületet kell elérni futásidőben, az memóriahasználatra is lefordítható. Ez hatással lesz az alkalmazás és általában a rendszer válaszkészségére. Továbbá, ha a lemezigény egy kis hányadára van szükség futásidőben, akkor előfordulhat, hogy az alkalmazás nem hatékonyan használja a lemezterületet.
A lemezterület csökkentésének vagy hatékonyabb megoldásának néhány módja:
Alkalmazza a "pay-for-play" elveket a lemez lábnyomára (csak azt töltse le, amire szüksége van): Az alkalmazások számos olyan funkciót tartalmazhatnak, amelyek nem minden felhasználóra vonatkoznak. Ez lehet az egyik oka annak, hogy nagy a lemez lábnyoma. A "pay-for-play" elvek alkalmazásával megkérheti a felhasználókat, hogy csak a számukra szükséges funkciókat töltsék le, ami kisebb tárhelyhasználatot eredményez az alkalmazás letöltésekor. A további tartalmakat csak akkor lehet letölteni, ha a felhasználónak gazdagabb képességekre van szüksége. A funkciók mellett ugyanezeket a "fizetéses" elveket is alkalmazhatja a nyelvi támogatásra. Az alkalmazás alapértelmezés szerint tartalmazhatja a népszerű nyelvválasztások egy részét, és további nyelvek is választhatók, vagy a felhasználó rendszerén beállított helytől függnek.
Hatékony gyorsítótár-méretezés alkalmazása: Bizonyos esetekben az alkalmazások lemezen tárolt gyorsítótárak használatával rugalmasabbá tehetik a felhasználói élményt. A szabályzatok beállíthatók az alkalmazás gyorsítótár-kezelésének módjára, a gyorsítótár méretének a lemezkapacitás alapján történő felső korlátjával, valamint a gyorsítótár átméretezésével, ha a lemezen kevés a szabad hely.
Az eszközök hatékony használata: Az alkalmazások gyakran tartalmaznak képeszközöket, és több felbontást támogató képméret-tartományból állhatnak. A képméret, a méretek, a formátum és a tömörítés optimalizálása a felbontások egy részhalmazához, valamint a skálázás használata a fennmaradó felbontások támogatásához jelentősen csökkentheti a lemezigényt.
Bináris optimalizálási lehetőségek vizsgálata: Az olyan eszközök, mint a SizeBench, lehetővé teszik az alkalmazás-szerzők számára, hogy megvizsgálhassák, mi járul hozzá a bináris lábnyomhoz, és lehetőséget találnak a felhasznált lemezterület csökkentésére.
További erőforrások
Windows developer