Sdílet prostřednictvím


Zvýšení výkonu aplikace snížením využití paměti a místa na disku

Tato příručka vám ukáže, jak zlepšit výkon aplikace pro Windows dvěma primárními způsoby:

Minimalizace využití paměti

Existuje řada způsobů, jak minimalizovat množství paměti, kterou vaše aplikace pro Windows používá, můžete:

  • Snížení využití paměti v popředí
  • Minimalizace práce na pozadí
  • Uvolnění prostředků na pozadí
  • Ujistěte se, že vaše aplikace neztrácí paměť.

Aby bylo možné odpovídajícím způsobem minimalizovat využití paměti, je nejprve důležité pochopit:

Jakmile budete mít systémové trasování k analýze, doporučíme vám, jak použití analýzy trasování ke snížení využití paměti.

Pracovní sada, dynamická paměť a virtuální přidělení

Pracovní sada aplikace – sada stránek v jeho virtuálním adresním prostoru, které jsou aktuálně v paměti – je jedním z měřítek využití paměti aplikace.

Velikost paměti, kterou aplikace používá, má vliv na výkon modulu runtime a také rychlost odezvy systému jako celku. Minimalizace využití paměti pomůže aplikaci lépe provádět snížením nákladů na procesor spojených s přístupem k větší paměti. Nižší využití paměti také pomáhá s odezvou systému a obecně s uživatelským prostředím aplikace, protože aplikace nakonec nevytěsňuje jiný obsah paměti.

K přemístění paměti může dojít, když se systém pokusí zachovat obsah v paměti, k němuž bylo nedávno přistupováno, a v případě potřeby ořeže a přenese na disk dříve použitý obsah. Když uživatel přepne zpět do prostředí nebo do jiné aplikace a potřebná data nejsou v paměti, data se budou muset načíst z disku. Uživatel si pravděpodobně všimne zpomalení kvůli tomuto procesu.

Pro paměť používanou aplikací existují dvě klíčové části: 1) dynamická paměť a 2) paměť s podporou souborů. Využití paměti založené na souborech pochází z binárních souborů a datových souborů, jako jsou databáze používané aplikací. Toto obvykle není významná část využití paměti aplikace a často jde o konstantní hodnotu. (Výjimkou by byly aplikace pro zpracování dat, kompilace kódu a podobně.) Hlavním zdrojem využití paměti a místem, kde se projeví úniky, je dynamická paměť.

Dynamická paměť odpovídá virtuální paměti přidělené aplikaci pomocí rutin přidělování paměti. Na rozdíl od paměti založené na souborech, která přetrvává napříč restartováními systému, existuje dynamická paměť pouze po celou dobu životnosti aplikace. Dynamická paměť je často významným zdrojem využití paměti a místem, kde se projevují úniky paměti.

Virtuální rutiny přidělování (VirtualAlloc) zpracovávají požadavky na přidělení paměti z aplikace systému Windows nezávisle na rutině aplikační vrstvy používané k přidělování paměti. I když není veškerá paměť přidělená aplikací po celou dobu v paměti, analýza těchto přidělení poskytuje konzistentní způsob, jak porozumět využití paměti aplikace.

Pokud chcete porozumět využití paměti vaší aplikace a najít místa pro vylepšení, doporučujeme zachytit trasování VirtualAllocation, jak je popsáno níže.

Zachycení systémového trasování za účelem analýzy využití paměti

Záznam aktivity zařízení v průběhu časového období se označuje jako trasování systému. trasování systému vytvoří trasovací soubor, který lze použít k vygenerování sestavy a pomůže vám zjistit, jak přesně zlepšit výkon vaší aplikace.

Stopy se mohou lišit délkou:

  • Krátké trasování lze použít k zachycení spuštění aplikace. To může zahrnovat přechod aplikace do neaktivního stavu, kdy je minimalizované okno aplikace nebo se zavře okna aplikace, zatímco proces aplikace přetrvává.
  • Dlouhotrvající trasování, trvající obvykle několik minut, je užitečné při diagnostice úniků paměti. Pokud se využití paměti v průběhu času neustále zvyšuje, obvykle to naznačuje únik.

Pro monitorování využití paměti je k dispozici několik nástrojů, mezi které patří:

Pro účely tohoto článku se zaměříme na použití Analyzátoru výkonu systému Windows. Další informace o výběru nástroje pro profilaci výkonu aplikace najdete v tématu Výběr mezi profilerem výkonu sady Visual Studio, sadou Windows Performance Toolkit a PerfView.

Zachytit stopu:

  1. Otevřete příkazový řádek (PowerShell nebo příkazový řádek)v režimu správce. (Pokud neběží v režimu správce, může se zobrazit kód chyby: 0xc5585011, nepovedlo se povolit zásadu profilování výkonu systému.)

  2. Zadejte příkaz: wpr -start VirtualAllocation -filemode

  3. Spusťte scénář, který prošetřujete. (Například spuštění aplikace.)

  4. Zadejte příkaz: wpr -stop Trace.etl

Analýza trasování systému

Abyste zjistili, které funkce vaší aplikace přidělily paměť, kterou byste mohli snížit, budete teď muset analyzovat trasování systému, které bylo zachyceno. Analýza trasování:

  1. Pomocí nástroje Windows Performance Analyzerotevřete trasování zadáním příkazu: wpa.exe Trace.etl

  2. V okně Graph Explorerrozbalte část Paměť, klikněte pravým tlačítkem na graf Celkové potvrzení a vyberte možnost Přidat graf do nové analýzy.

  3. Otevřete editoru zobrazení kliknutím na nastavení nastavení a výběrem následujícího uspořádání sloupců: Proces, Typ potvrzení, Velikost zásobníku potvrzení a Velikost.

  4. Klikněte na záhlaví sloupce Velikost , aby se výsledky seřadily sestupně. Zásobník potvrzení ukazuje cestu kódu vedoucí k přidělení paměti. Tyto výsledky vám můžou pomoct pochopit důvod přidělení. Řazení podle velikosti umožňuje zaměřit se na větší přidělení a prozkoumat, jestli existuje příležitost k optimalizaci.

  5. Omezte výběr na proces(y), které chcete analyzovat, kliknutím pravým tlačítkem na proces a výběrem Filtr na výběr.

  6. Pokud chcete přiblížit oblast zájmu v oblasti zobrazení, vyberte oblast, klikněte pravým tlačítkem myši na graf a vyberte Lupa.

  7. Procházejte zásobníkem Commit, abyste pochopili, které funkce alokovaly paměť. Zásobníky potvrzení budou potřebovat symboly načtené. Pokud chcete načíst symboly, vyberte Trasování>Načíst symboly v horní navigační liště.

    Snímek obrazovky trasování paměti nástroje Windows Performance Analyzer

Použití analýzy trasování za účelem snížení využití paměti

Při analýze přidělené paměti najdete vodítka, která vám pomůžou rozhodnout, kde je možné minimalizovat využití paměti.

Několik oblastí, které byste měli zvážit v souvislosti s použitím analýzy trasování směrem k aktualizaci kódu za účelem snížení využití paměti, patří:

  • Snížení využití paměti, když je v popředí: Analýza paměťové stopy vám může pomoci identifikovat nepotřebné využití paměti v popředí a aktualizovat kód tak, aby toto využití snížil nebo odstranil.

  • Minimalizace práce na pozadí: Systém má zásady pro postupné vyřazování stránek z pracovních sad procesů. Používání méně paměti na pozadí umožňuje systému být efektivnější tím, že udržuje v paměti méně aplikací. Přečtěte si další informace o tom, jak zlepšit spotřebu energie a výdrž baterie tím, že minimalizujete práci na pozadí, což se také projeví při použití menšího využití paměti na pozadí.

  • Uvolnění prostředků na pozadí: Za běhu může aplikace vytvořit některé paměťové mezipaměti a také vytvořit grafické alokace pro podporu svého uživatelského rozhraní. Tyto přidělení můžou být možné uvolnit, pokud je aplikace minimalizovaná nebo není viditelná. Aplikace se může zaregistrovat k oznámením o nedostatku paměti, aby mohla podniknout potřebné kroky, ale lepší strategií může být uvolnění paměti po určité době nečinnosti, když aplikace dospěje k závěru, že je neaktivní. Toto období disuse se může lišit podle aplikace, takže možné indikátory neaktivního použití mohou být v rozsahu od několika minut po 1/2 hodiny nebo více. Je třeba věnovat pozornost vyvážení tohoto druhu úspor paměti s reaktivitou. Pokud je opětovné sestavení mezipaměti nákladné, může se aplikace rozhodnout, že ji po celou dobu životnosti aplikace zachová.

  • Ujistěte se, že aplikace nevracela paměť: Chcete-li zkontrolovat nevracení paměti, nejprve vytvořte srovnávací test stabilního stavu, kdy využití paměti aplikace nedochází k nárůstu nad určitou hodnotu. Tento stabilní stav můžete vytvořit nepřetržitě pomocí aplikace nebo ji nechat nečinnou na pozadí. Pomocí trasování, které jste zachytili k identifikaci možného paměťového úniku, můžete zjistit, kde se tato paměť přiděluje ve vašem kódu a jak může být uvolněna poté, co splní svůj účel. Pokud se paměť během běhu aplikace bude dál zvětšovat, pravděpodobně to naznačuje únik paměti. Přibližte oblast odpovídající růstu v rámci trasování a pečlivě analyzujte zásobníky potvrzení.

Efektivní využití místa na disku

Datová stopa na disku odkazuje na velikost aplikace, když je uložena v neaktivním stavu (kód není spuštěn). Pokud aplikace zabírá velké nároky na disk, může být příležitostí k optimalizaci.

Existuje několik způsobů, jak snížit nároky na disky vaší aplikace, což může zvýšit výkon:

  • Jakmile se disk zaplní, systém souborů už nemůže ukládat nový obsah souvislým způsobem. Celý disk se fragmentuje a uloží nový obsah do nesouvislých sektorů. To znamená delší dobu latence, kdy se k tomuto obsahu přistupuje z disku. Pokud je obsah souvislý a lze k němu přistupovat sekvenčně nebo většími IO operacemi, vstupně-výstupní systémy poskytují mnohem lepší propustnost disku.

  • Úplný disk může vést k delším latencím zápisu pro systémy založené na SSD. Pokud je k dispozici méně prázdných buněk k absorbování zápisů, může zápis vyžadovat operaci čtení-modifikace-zápisu, což zpomaluje výkon.

  • Plný disk může bránit možnosti aktualizovat aplikaci. I když je operační systém odolný a dokáže udržovat systém v aktualizovaném a zabezpečeném stavu, a to i v případě nedostatku volného místa na disku, množství volného místa na disku pro přípravu obsahu aktualizace aplikace se přeloží na rychlejší a plynulejší prostředí aktualizací.

  • Vyžadování výrazného diskového prostoru během běhu bude také znamenat využití paměti. To bude mít vliv na rychlost odezvy aplikace a systému obecně. Kromě toho, pokud je při běhu vyžadován malý podíl diskové stopy, může aplikace neefektivně využívat místo na disku.

Několik způsobů, jak snížit nebo zefektivnit místo na disku, patří:

  • Používejte principy "pay-for-play" na svou diskovou stopu (stahujte pouze to, co potřebujete): Aplikace může obsahovat širokou škálu funkcí, které se nevztahují na všechny uživatele. To může být jedním z důvodů značného nárokování místa na disku. Když použijete principy "pay-for-play", můžete uživatele požádat, aby si stáhli jen funkce, které potřebují, což vede k menším nárokům na disk při stažení vaší aplikace. Další obsah je volitelný ke stažení jenom v případě, že uživatel potřebuje bohatší možnosti. Kromě funkcí můžete na podporu jazyků použít stejné principy "pay-for-play". Aplikace může ve výchozím nastavení obsahovat podmnožinu oblíbených jazykových voleb s dalšími jazyky, které jsou volitelně zahrnuté nebo závislé na umístění nastaveném v systému uživatele.

  • Použití efektivní velikosti mezipaměti: V některých případech může aplikace používat mezipaměti na disku, aby uživatelské prostředí rychleji reagovalo. Zásady se dají nastavit tak, jak vaše aplikace spravuje mezipaměť, s horním limitem nastaveným na velikost mezipaměti na základě kapacity disku a změnou velikosti mezipaměti v případě nízkého místa na disku.

  • Efektivní použití aktiv: Aplikace bude často obsahovat obrazové zdroje a může zahrnovat obrázky různých velikostí pro podporu více rozlišení. Optimalizace velikosti obrázku, rozměrů, formátu a komprese pro podmnožinu rozlišení a využití škálování pro podporu zbývajících rozlišení může výrazně snížit nároky na disk.

  • Prozkoumejte příležitosti binární optimalizace: Nástroje, jako je SizeBench, umožňují autorům aplikací prozkoumat, co přispívá k binární stopě, a najít příležitosti ke snížení využitého místa na disku.

Dodatečné zdroje