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.
Ve většině případů může automatické čištění paměti určit nejlepší čas pro provedení sběru, a měli byste mu umožnit samostatný chod. Existují vzácné situace, kdy vynucená kolekce může zlepšit výkon vaší aplikace. V těchto případech můžete vyvolat uvolňování paměti pomocí GC.Collect k vynucení sběru odpadu.
Tuto metodu GC.Collect použijte, pokud dochází k významnému snížení množství paměti používané v určitém bodě v kódu vaší aplikace. Pokud například vaše aplikace používá komplexní dialogové okno s několika ovládacími prvky, může volání Collect při zavření dialogového okna zvýšit výkon okamžitým uvolněním paměti používané dialogovým oknem. Ujistěte se, že vaše aplikace příliš často nenutí sběrač odpadu, protože to může snížit výkon, pokud se garbage collector pokouší uvolnit objekty v neoptimální době. Do metody můžete zadat hodnotu výčtu GCCollectionMode.Optimized, aby se shromáždění Collect provedlo pouze tehdy, když by bylo produktivní, jak je popsáno v další části.
Režim shromažďování uvolňování paměti
Můžete použít jedno z GC.Collect přetížení metody, které zahrnuje GCCollectionMode hodnotu k určení chování vynuceného shromažďování následujícím způsobem.
GCCollectionMode hodnota |
Popis |
|---|---|
| Default | Používá výchozí nastavení správy paměti pro spuštěnou verzi .NET frameworku. |
| Forced | Vynutí okamžitý sběr odpadu. Toto je ekvivalent volání přetížené verze GC.Collect(). Výsledkem je úplná blokující kolekce všech generací. Velkou hromadu objektů můžete také zkomprimovat nastavením GCSettings.LargeObjectHeapCompactionMode vlastnosti na GCLargeObjectHeapCompactionMode.CompactOnce před vynucením okamžitého úplného blokujícího uvolňování paměti. |
| Optimized | Umožňuje garbage collectoru určit, zda je aktuální čas vhodný pro uvolnění objektů. Mechanismus uvolňování paměti, tzv. garbage collector, může určit, že sběr nebude natolik efektivní, aby byl odůvodněný, a v takovém případě se vrátí, aniž by získal zpět objekty. |
Pozadí nebo blokující kolekce
Můžete volat přetížení metody GC.Collect(Int32, GCCollectionMode, Boolean) , abyste určili, zda je indukovaná kolekce blokující nebo ne. Typ provedené kolekce závisí na kombinaci parametrů metody mode a blocking.
mode je členem výčtu GCCollectionMode a blocking je Boolean hodnotou. Následující tabulka shrnuje interakci argumentů mode a blocking argumentů.
mode |
blocking = true |
blocking = false |
|---|---|---|
| Forced nebo Default | Blokující kolekce se provádí co nejdříve. Pokud probíhá sběr na pozadí a generace je 0 nebo 1, metoda Collect(Int32, GCCollectionMode, Boolean) okamžitě aktivuje blokující sběr a vrátí se po dokončení sběru. Pokud probíhá sbírání na pozadí a parametr generation je 2, metoda počká, dokud se sbírání na pozadí nedokončí, spustí zablokování sbírky 2. generace a poté se vrátí. |
Sběr se provede co nejdříve. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, což však není zaručeno; v závislosti na okolnostech může být přesto provedena blokující kolekce. Pokud již probíhá sběr na pozadí, metoda se vrátí okamžitě. |
| Optimized | Blokující kolekce může být provedena v závislosti na stavu garbage collectoru a parametru generation. Systém garbage collector se snaží zajistit optimální výkon. |
V závislosti na stavu garbage collectoru může být proveden sběr. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, což však není zaručeno; v závislosti na okolnostech může být přesto provedena blokující kolekce. Systém garbage collector se snaží zajistit optimální výkon. Pokud již probíhá sběr na pozadí, metoda se vrátí okamžitě. |