Vyvolané kolekce
Ve většině případů může systém uvolňování paměti určit nejvhodnější čas k provedení uvolnění paměti, které byste pak měli nechat běžet nezávisle. 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 metody vynucení uvolňování paměti.
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 nevynucuje uvolňování paměti, protože to může snížit výkon, pokud se uvolňování paměti pokouší uvolnit objekty v neoptimální době. Do metody můžete zadat GCCollectionMode.Optimized hodnotu výčtu Collect , která se má shromáždit pouze v případě, že by kolekce byla 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é obsahuje GCCollectionMode hodnotu k určení chování vynucené kolekce následujícím způsobem.
GCCollectionMode Hodnotu |
Popis |
---|---|
Default | Používá výchozí nastavení uvolňování paměti pro spuštěnou verzi .NET. |
Forced | Vynutí okamžité uvolnění paměti. To je ekvivalent volání GC.Collect() přetížení. Výsledkem je úplná blokující kolekce všech generací. Velkou haldu objektu můžete také zkomprimovat nastavením GCSettings.LargeObjectHeapCompactionMode vlastnosti před GCLargeObjectHeapCompactionMode.CompactOnce vynucením okamžitého úplného blokování uvolňování paměti. |
Optimized | Umožňuje uvolňování paměti určit, jestli je aktuální čas optimální pro uvolnění objektů. Systém uvolňování paměti by mohl určit, že kolekce nebude dostatečně produktivní, aby byla odůvodněná, v takovém případě se vrátí bez uvolnění objektů. |
Pozadí nebo blokující kolekce
Přetížení metody můžete volat GC.Collect(Int32, GCCollectionMode, Boolean) , chcete-li určit, zda indukovaná kolekce je blokující nebo ne. Typ provedené kolekce závisí na kombinaci parametrů a blocking
metodymode
. 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á kolekce na pozadí a generování je 0 nebo 1, Collect(Int32, GCCollectionMode, Boolean) metoda okamžitě aktivuje blokující kolekci a vrátí se po dokončení kolekce. Pokud probíhá kolekce na pozadí a generation parametr je 2, metoda počká, dokud se kolekce pozadí nedokončí, aktivuje blokující kolekci 2. generace a vrátí se. |
Kolekce se provede co nejdříve. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, ale to není zaručeno. V závislosti na okolnostech může být blokující kolekce stále provedena. Pokud již probíhá kolekce na pozadí, vrátí metoda okamžitě. |
Optimized | Blokující kolekci je možné provést v závislosti na stavu uvolňování paměti a parametru generation . Systém uvolňování paměti se snaží zajistit optimální výkon. |
V závislosti na stavu uvolňování paměti je možné provést kolekci. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, ale to není zaručeno. V závislosti na okolnostech může být blokující kolekce stále provedena. Systém uvolňování paměti se snaží zajistit optimální výkon. Pokud již probíhá kolekce na pozadí, vrátí metoda okamžitě. |