Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Uvolňovač paměti je samooptimalizující 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 správy 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í režim GC.
Uvolňování paměti pracovní stanice může být souběžné nebo nesouběžné. Souběžné (nebo na pozadí) uvolňování paměti umožňuje 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 na serveru nesouběžné nebo prováděné 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:
Důležité informace o výkonu
Pracovní stanice GC
Následují úvahy o vláknech a výkonu při uvolňování paměti pracovní stanice:
Sběr se provádí v uživatelském vlákně, které aktivovalo uvolňování paměti, a zůstává ve stejné prioritě vlákna. Vzhledem k tomu, že uživatelská vlákna obvykle běží s normální prioritou, musí garbage collector (který běží s normální prioritou) soutěžit s ostatními vlákny o čas procesoru. (Vlákna, která spouští nativní kód, nejsou pozastavena během správy paměti, ať už na serveru nebo na pracovní stanici.)
Uvolňování paměti typu garbage collection se vždy používá na počítači, který má pouze jeden logický procesor, bez ohledu na nastavení konfigurace.
Server GC
Při serverové správě odpadní paměti je třeba zvážit následující aspekty týkající se podprocesů a výkonu:
Sběr se provádí na 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 nedělejte předpoklady ohledně velikosti segmentů přidělených uvolňovačem 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 všechny procesy provádějí garbage collection ve stejnou dobu, budou se navzájem rušit, protože na stejném logickém CPU je naplánováno 12 vláken. Pokud jsou procesy aktivní, není vhodné, aby všechny používaly serverový GC.
Pokud provozujete stovky instancí aplikace, zvažte použití pracovní režim uvolňování paměti s vypnutý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.