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.

Lásd még