Latentiemodi
Als u objecten wilt vrijmaken, moet de garbagecollector (GC) alle uitvoerthreads in een toepassing stoppen. De periode waarin de garbagecollector actief is, wordt de latentie genoemd.
In sommige situaties, zoals wanneer een toepassing gegevens ophaalt of inhoud weergeeft, kan een volledige garbagecollection op een kritiek moment optreden en de prestaties belemmeren. U kunt de intrusiviteit van de garbagecollector aanpassen door de GCSettings.LatencyMode eigenschap in te stellen op een van de System.Runtime.GCLatencyMode waarden.
Instellingen voor lage latentie
Het gebruik van een 'lage' latentie-instelling betekent dat de garbagecollector minder in uw toepassing indringt. Garbagecollection is conservatiever over het vrijmaken van geheugen.
De System.Runtime.GCLatencyMode opsomming biedt twee instellingen voor lage latentie:
GCLatencyMode.LowLatency onderdrukt verzamelingen van de tweede generatie en voert alleen verzamelingen van generatie 0 en 1 uit. Het kan slechts voor korte tijd worden gebruikt. Als het systeem gedurende langere perioden onder geheugendruk staat, activeert de garbagecollector een verzameling, waardoor de toepassing kort kan worden onderbroken en een tijdkritische bewerking kan worden onderbroken. Deze instelling is alleen beschikbaar voor garbagecollection van werkstations.
GCLatencyMode.SustainedLowLatency onderdrukt verzamelingen voorgrond generatie 2 en voert alleen verzamelingen van de 0, 1 en achtergrond generatie 2 uit. Het kan gedurende langere tijd worden gebruikt en is beschikbaar voor zowel werkstation als server garbagecollection. Deze instelling kan niet worden gebruikt als de garbagecollection op de achtergrond is uitgeschakeld.
Tijdens lage latentieperioden worden verzamelingen van de tweede generatie onderdrukt, tenzij het volgende gebeurt:
Het systeem ontvangt een melding met weinig geheugen van het besturingssysteem.
Toepassingscode veroorzaakt een verzameling door de GC.Collect methode aan te roepen en 2 voor de
generation
parameter op te geven.
Scenario's
De volgende tabel bevat de toepassingsscenario's voor het gebruik van de GCLatencyMode waarden:
Latentiemodus | Toepassingsscenario's |
---|---|
Batch | Voor toepassingen die geen gebruikersinterface (UI) of bewerkingen aan de serverzijde hebben. Wanneer de achtergrond garbagecollection is uitgeschakeld, is dit de standaardmodus voor werkstation en server garbagecollection. Batch -modus overschrijft ook de instelling gcConcurrent , dat wil gezegd, het voorkomt achtergrond- of gelijktijdige verzamelingen. |
Interactive | Voor de meeste toepassingen met een gebruikersinterface. Dit is de standaardmodus voor werkstation en server garbagecollection. Als een app echter wordt gehost, hebben de garbagecollection-instellingen van het hostingproces voorrang. |
LowLatency | Voor toepassingen met korte tijdgevoelige bewerkingen waarbij onderbrekingen van de garbagecollector verstorend kunnen zijn. Toepassingen die bijvoorbeeld animaties of functies voor gegevensverwerving weergeven. |
SustainedLowLatency | Voor toepassingen die tijdgevoelige bewerkingen hebben voor een ingesloten, maar mogelijk langere tijdsduur waarin onderbrekingen van de garbagecollector verstorend kunnen zijn. Toepassingen die bijvoorbeeld snelle reactietijden nodig hebben wanneer marktgegevens veranderen tijdens handelsuren. Deze modus resulteert in een grotere beheerde heapgrootte dan andere modi. Omdat de beheerde heap niet wordt gecomprimeerd, is een hogere fragmentatie mogelijk. Zorg ervoor dat er voldoende geheugen beschikbaar is. |
Richtlijnen voor het gebruik van lage latentie
Houd rekening met de volgende richtlijnen wanneer u de GCLatencyMode.LowLatency-modus gebruikt:
Houd de tijdsperiode zo kort mogelijk in lage latentie.
Vermijd het toewijzen van grote hoeveelheden geheugen tijdens lage latentieperioden. Er kunnen onvoldoende geheugenmeldingen optreden omdat garbagecollection minder objecten terugvordert.
Minimaliseer in de modus met lage latentie het aantal nieuwe toewijzingen, met name toewijzingen op de grote object-heap en vastgemaakte objecten.
Houd rekening met threads die kunnen worden toe te wijzen. Omdat de LatencyMode eigenschapsinstelling procesbreed is, OutOfMemoryException kunnen uitzonderingen worden gegenereerd voor elke thread die wordt toegedeeld.
Verpakt de code met lage latentie in beperkte uitvoeringsregio's. Zie Beperkte uitvoeringsregio's voor meer informatie.
U kunt verzamelingen van de tweede generatie afdwingen tijdens een lage latentieperiode door de methode aan te GC.Collect(Int32, GCCollectionMode) roepen.