Dela via


Svarstidslägen

Om du vill frigöra objekt måste skräpinsamlaren (GC) stoppa alla körningstrådar i ett program. Den tidsperiod under vilken skräpinsamlaren är aktiv kallas dess svarstid.

I vissa situationer, till exempel när ett program hämtar data eller visar innehåll, kan en fullständig skräpinsamling ske vid en kritisk tidpunkt och hindra prestanda. Du kan justera skräpinsamlarens påträngande genom att ange GCSettings.LatencyMode egenskapen till ett av System.Runtime.GCLatencyMode värdena.

Inställningar för låg svarstid

Om du använder en "låg" svarstidsinställning innebär det att skräpinsamlaren inkräktar mindre i ditt program. Skräpinsamling är mer konservativ när det gäller att frigöra minne.

Uppräkningen System.Runtime.GCLatencyMode innehåller två inställningar för låg latens:

  • GCLatencyMode.LowLatency undertrycker generation 2-samlingar och utför endast samlingar av generation 0 och 1. Den kan endast användas under korta tidsperioder. Om systemet är under minnesbelastning under längre perioder utlöser skräpinsamlaren en samling som kort kan pausa programmet och störa en tidskritisk åtgärd. Den här inställningen är endast tillgänglig för skräpinsamling för arbetsstationer.

  • GCLatencyMode.SustainedLowLatency undertrycker förgrundssamlingar av generation 2 och utför endast samlingar av generation 0, 1 och bakgrund 2. Den kan användas under längre tidsperioder och är tillgänglig för både arbetsstation och serverskräpinsamling. Den här inställningen kan inte användas om skräpinsamling i bakgrunden är inaktiverad.

Under perioder med låg svarstid ignoreras generation 2-samlingar såvida inte följande inträffar:

  • Systemet får ett meddelande om lite minne från operativsystemet.

  • Programkoden inducerar en samling genom att anropa GC.Collect metoden och ange 2 för parametern generation .

Scenarier

I följande tabell visas programscenarier för användning av GCLatencyMode värdena:

Svarstidsläge Programscenarier
Batch För program som inte har något användargränssnitt eller åtgärder på serversidan.

När skräpinsamling i bakgrunden är inaktiverat är detta standardläget för arbetsstation och serverskräpinsamling. Batch -läget åsidosätter också inställningen gcConcurrent , dvs. den förhindrar bakgrundssamlingar eller samtidiga samlingar.
Interactive För de flesta program som har ett användargränssnitt.

Det här är standardläget för arbetsstation och serverskräpinsamling. Men om en app finns har inställningarna för skräpinsamlaren i värdprocessen företräde.
LowLatency För program som har kortsiktiga, tidskänsliga åtgärder under vilka avbrott från skräpinsamlaren kan vara störande. Till exempel program som renderar animeringar eller funktioner för datainsamling.
SustainedLowLatency För program som har tidskänsliga åtgärder under en innesluten men potentiellt längre tidsperiod under vilken avbrott från skräpinsamlaren kan vara störande. Till exempel program som behöver snabba svarstider när marknadsdata ändras under handelstimmarna.

Det här läget resulterar i en större hanterad heapstorlek än andra lägen. Eftersom den inte komprimerar den hanterade heapen är högre fragmentering möjlig. Kontrollera att tillräckligt med minne är tillgängligt.

Riktlinjer för att använda korta svarstider

När du använder GCLatencyMode.LowLatency-läge bör du tänka på följande riktlinjer:

  • Håll tidsperioden i låg svarstid så kort som möjligt.

  • Undvik att allokera stora mängder minne under perioder med låg svarstid. Meddelanden med lite minne kan inträffa eftersom skräpinsamlingen frigör färre objekt.

  • I läget med låg svarstid minimerar du antalet nya allokeringar, särskilt allokeringar till den stora objekthögen och fästa objekt.

  • Tänk på trådar som kan allokeras. Eftersom egenskapsinställningen LatencyMode är processomfattande OutOfMemoryException kan undantag genereras på alla trådar som allokeras.

  • Omslut koden med låg svarstid i begränsade körningsregioner. Mer information finns i Begränsade körningsregioner.

  • Du kan tvinga generation 2-samlingar under en period med låg svarstid genom att anropa GC.Collect(Int32, GCCollectionMode) metoden.

Se även