Windows Phone 7 a jeho Garbage Collector

Nové telefony se systémem Windows Phone 7 nepřinášejí jen standardizovaný hardware, barevné kostičky a absenci copy&paste. Od starších verzí se liší z pohledu vývojáře hlavně v tom, že aplikace pro ně je možné vytvářet pomocí dvou technologií – Silverlight a XNA. Druhá jmenovaná slouží k tvorbě her a je díky ní možné dosáhnout efektu „three screens and a cloud„. Ačkoliv jsou dnešní telefony výkonnější než většina PC známých před deseti lety, stále nedosahují na Xbox, proto je třeba nespouštět z mysli náročnost aplikace. A když jde o výkonnost a .NET, není možné minout Garbage Collector, o kterém je tento článek.

Pro udržení vysokého výkonu her na Windows Phone 7 platí dvě základní pravidla:

  • minimalizovat spotřebu paměti
  • a minimalizovat spouštění garbage collection.

Je třeba si uvědomit, že Garbage Collector na WP7 se liší od toho, který známe v desktopovém .NET na Windows. Součástí mobilního operačního systému je ořezaná verze .NET Compact Framework, který má vlastní běhové prostředí (CLR) a tím pádem i trochu jinou správu paměti.

V drtivé většině případů se mezi XNA a Silverlightem práce s pamětí neliší, při vývoji her je ale možné narazit na větší problémy s výkonem. Problém GC je v tom, že jakmile collection začne, zastaví všechna ostatní vlákna.

Automatická garbage collection se spouští v případě, že vnitřní počítadlo množství alokované řízené paměti dosáhne hodnoty 1 MB. Následně se hodnota vynuluje a znovu se čeká, dokud nepřekročí práh. Z toho plyne, že GC se nespouští na základě časovače. Tento limit, označovaný jako GC Quantum, není u WP7 možné změnit.

Mimo to je GC zavolán v případě, že dojde při některé „nativní“ alokaci k chybě kvůli nedostatku paměti – po pokusu o její uvolnění se alokace zopakuje (ale pouze jednou).

Do třetice je možné GC zavolat z kódu metodou System.GC.Collect(). To se doporučuje provádět v okamžicích, kdy hra neočekává od uživatele žádnou činnost (například při načítání nového levelu). Její použití mimo jiné vynuluje interní 1MB počítadlo.

Zvláštním případem je tzv. Sharing Server, novinka WP7, který sedí na pozadí systému a koordinuje všechny řízené procesy. Jakmile dostane upozornění na nedostatek paměti, spustí v nich GC.

Další informace shrnuje oficiální dokument, který je součástí výukové sady Windows Phone 7 Education. Ke stažení zde: http://create.msdn.com/en-US/education/catalog/article/performance_wp7_games.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *