Késési módok
Objektumok visszaigényléséhez a szemétgyűjtőnek (GC) le kell állítania az alkalmazás összes végrehajtási szálát. Az az időtartam, amely alatt a szemétgyűjtő aktív, késésnek nevezzük.
Bizonyos helyzetekben, például amikor egy alkalmazás adatokat kér le vagy tartalmat jelenít meg, a teljes szemétgyűjtés kritikus időben fordulhat elő, és akadályozhatja a teljesítményt. A szemétgyűjtő behatolását úgy módosíthatja, hogy a GCSettings.LatencyMode tulajdonságot az System.Runtime.GCLatencyMode egyik értékre állítja.
Alacsony késési beállítások
Az "alacsony" késési beállítás azt jelenti, hogy a szemétgyűjtő kevésbé behatol az alkalmazásban. A szemétgyűjtés konzervatívabb a memória visszanyerésével kapcsolatban.
Az System.Runtime.GCLatencyMode enumerálás két alacsony késési beállítást biztosít:
A GCLatencyMode.LowLatency letiltja a 2. generációs gyűjteményeket, és csak a 0. és az 1. generációs gyűjteményeket hajtja végre. Csak rövid ideig használható. Hosszabb időszakokban, ha a rendszer memóriaterhelés alatt áll, a szemétgyűjtő elindít egy gyűjteményt, amely rövid ideig szüneteltetheti az alkalmazást, és megszakíthatja az idő szempontjából kritikus műveletet. Ez a beállítás csak a munkaállomás szemétgyűjtéséhez érhető el.
A GCLatencyMode.SustainedLowLatency letiltja a 2. generációs előtér-gyűjteményeket, és csak a 0., 1. és a 2. generációs háttérgyűjteményeket hajtja végre. Hosszabb ideig használható, és a munkaállomás és a kiszolgáló szemétgyűjtéséhez is elérhető. Ez a beállítás nem használható, ha a háttérbeli szemétgyűjtés le van tiltva.
Az alacsony késési időszakokban a 2. generációs gyűjtemények el lesznek tiltva, kivéve, ha az alábbiak történnek:
A rendszer alacsony memóriahasználatról szóló értesítést kap az operációs rendszertől.
Az alkalmazáskód a metódus meghívásával és a GC.Collect paraméter 2-ének
generation
megadásával gyűjtést indukál.
Forgatókönyvek
Az alábbi táblázat az értékek használatára vonatkozó alkalmazási forgatókönyveket sorolja fel GCLatencyMode :
Késési mód | Alkalmazáshasználati helyzetek |
---|---|
Batch | Felhasználói felülettel (UI) vagy kiszolgálóoldali műveletekkel nem rendelkező alkalmazások esetén. Ha a háttérbeli szemétgyűjtés le van tiltva, ez az alapértelmezett mód a munkaállomás és a kiszolgáló szemétgyűjtéséhez. Batch A mód felülbírálja a gcConcurrent beállítást is, vagyis megakadályozza a háttér- vagy egyidejű gyűjtemények létrehozását. |
Interactive | A legtöbb felhasználói felülettel rendelkező alkalmazás esetében. Ez a munkaállomás és a kiszolgáló szemétgyűjtésének alapértelmezett módja. Ha azonban egy alkalmazást üzemeltetnek, az üzemeltetési folyamat szemétgyűjtő beállításai elsőbbséget élveznek. |
LowLatency | Olyan alkalmazások esetében, amelyek rövid távú, időérzékeny műveleteket végeznek, amelyek során a szemétgyűjtő megszakításai zavaróak lehetnek. Például animációkat vagy adatgyűjtő függvényeket megjelenítő alkalmazások. |
SustainedLowLatency | Olyan alkalmazások esetében, amelyek időérzékeny műveleteket végeznek egy korlátozott, de akár hosszabb ideig, amely során a szemétgyűjtő megszakításai zavaróak lehetnek. Például azok az alkalmazások, amelyeknek gyors válaszidőre van szükségük, amikor a piaci adatok a kereskedési órákban változnak. Ez a mód a többi módnál nagyobb felügyelt halomméretet eredményez. Mivel nem tömöríti a felügyelt halomot, nagyobb töredezettség lehetséges. Győződjön meg arról, hogy elegendő memória áll rendelkezésre. |
Útmutató az alacsony késés használatához
A GCLatencyMode.LowLatency mód használatakor vegye figyelembe az alábbi irányelveket:
Az időtartamot a lehető legrövidebb ideig tartsa alacsony késésben.
Kerülje a nagy mennyiségű memória kiosztását alacsony késési időszakokban. A memóriahiányos értesítések azért fordulhatnak elő, mert a szemétgyűjtés kevesebb objektumot igényel vissza.
Alacsony késési módban minimalizálja az új foglalások számát, különösen a nagy objektum halomra és rögzített objektumokra való foglalásokat.
Vegye figyelembe azokat a szálakat, amelyek kioszthatók. Mivel a LatencyMode tulajdonságbeállítás folyamatszintű, OutOfMemoryException kivételeket lehet létrehozni az összes kiosztott szálon.
Csomagolja be az alacsony késésű kódot a korlátozott végrehajtási régiókban. További információ: Korlátozott végrehajtási régiók.
A metódus meghívásával GC.Collect(Int32, GCCollectionMode) kényszerítheti a 2. generációs gyűjteményeket alacsony késési időszakban.