Uvolnění paměti pracovní stanice a serveru

Systém uvolňování paměti je samoobslužný ladění a může fungovat v nejrůznějších scénářích. Typ uvolňování paměti ale můžete nastavit na základě charakteristik úlohy. CLR poskytuje následující typy uvolňování paměti:

  • Uvolňování paměti pracovní stanice (GC), která je určená pro klientské aplikace. Jedná se o výchozí variantu GC pro samostatné aplikace. U hostovaných aplikací, například těch hostovaných ASP.NET, určuje hostitel výchozí příchuť GC.

    Uvolňování paměti pracovní stanice může být souběžné nebo ne souběžné. Souběžné (nebo na pozadí) uvolňování paměti umožňují spravovaným vláknům pokračovat v operacích během uvolňování paměti. Uvolňování paměti na pozadí nahrazuje souběžné uvolňování paměti v rozhraní .NET Framework 4 a novějších verzích.

  • Uvolňování paměti serveru, které je určené pro serverové aplikace, které potřebují vysokou propustnost a škálovatelnost.

    • V .NET Core může být uvolňování paměti serveru nesouběrné nebo na pozadí.

    • V rozhraní .NET Framework 4.5 a novějších verzích může být uvolňování paměti serveru nesouběrné nebo na pozadí. V rozhraní .NET Framework 4 a předchozích verzích není uvolňování paměti serveru souběžné.

Následující obrázek znázorňuje vyhrazená vlákna, která provádějí uvolňování paměti na serveru:

Server Garbage Collection Threads

Důležité informace o výkonu

GC pracovní stanice

Tady jsou důležité informace o podprocesu a výkonu pro uvolňování paměti pracovní stanice:

  • Kolekce se provádí v uživatelském vlákně, které aktivovalo uvolňování paměti a zůstává ve stejné prioritě. Vzhledem k tomu, že uživatelská vlákna obvykle běží s normální prioritou, musí systém uvolňování paměti (který běží na normálním vlákně priority) soutěžit s ostatními vlákny za dobu procesoru. (Vlákna, která spouští nativní kód, nejsou pozastavena na serveru nebo pracovní stanici uvolňování paměti.)

  • Uvolňování paměti pracovní stanice se vždy používá v počítači, který má pouze jeden logický procesor bez ohledu na nastavení konfigurace.

Server GC

Při uvolňování paměti serveru je potřeba vzít v úvahu následující aspekty týkající se podprocesů a výkonu:

  • Kolekce se provádí v několika vyhrazených vláknech. Ve Windows se tato vlákna spouštějí na THREAD_PRIORITY_HIGHEST úrovni priority.

  • Haldu a vyhrazené vlákno pro provádění uvolňování paměti jsou k dispozici pro každý logický procesor a haldy se shromažďují současně. Každá halda obsahuje malou haldu objektu a velkou haldu objektu a všechny haldy mohou být přístupné pomocí uživatelského kódu. Objekty na různých haldách se mohou vzájemně odkazovat.

  • Vzhledem k tomu, že několik vláken uvolňování paměti funguje společně, je uvolňování paměti serveru rychlejší než uvolňování paměti pracovní stanice ve stejné velikosti haldy.

  • Uvolňování paměti serveru má často větší segmenty velikosti. Jedná se ale pouze o generalizaci: velikost segmentu je specifická pro implementaci a může se změnit. Při ladění aplikace nepředpokládáme velikost segmentů přidělených uvolňováním paměti.

  • Uvolňování paměti serveru může být náročné na prostředky. Představte si například, že existuje 12 procesů, které používají serverový GC spuštěný v počítači se čtyřmi logickými procesory. Pokud se všechny procesy shromáždí uvolňování paměti ve stejnou dobu, budou vzájemně kolidovat, protože na stejném logickém procesoru je naplánovaných 12 vláken. Pokud jsou procesy aktivní, není vhodné je mít všechny používat serverový GC.

Pokud používáte stovky instancí aplikace, zvažte použití uvolňování paměti pracovní stanice se zakázaným souběžným uvolňováním paměti. Výsledkem bude méně přepínání kontextu, což může zlepšit výkon.

Viz také