Geïnduceerde verzamelingen
In de meeste gevallen kan de garbagecollector de beste tijd bepalen om een verzameling uit te voeren en moet u deze onafhankelijk laten uitvoeren. Er zijn zeldzame situaties waarin een geforceerde verzameling de prestaties van uw toepassing kan verbeteren. In deze gevallen kunt u garbagecollection veroorzaken met behulp van de GC.Collect methode om een garbagecollection af te dwingen.
Gebruik de GC.Collect methode wanneer er een aanzienlijke vermindering is van de hoeveelheid geheugen die op een specifiek punt in de code van uw toepassing wordt gebruikt. Als uw toepassing bijvoorbeeld gebruikmaakt van een complex dialoogvenster met verschillende besturingselementen, kan het aanroepen Collect wanneer het dialoogvenster wordt gesloten de prestaties verbeteren door het geheugen dat door het dialoogvenster wordt gebruikt, onmiddellijk vrij te maken. Zorg ervoor dat uw toepassing niet te vaak garbagecollection veroorzaakt, omdat dat de prestaties kan verminderen als de garbagecollector objecten probeert vrij te maken op niet-optimale tijden. U kunt een GCCollectionMode.Optimized opsommingswaarde opgeven voor de Collect methode die alleen moet worden verzameld wanneer de verzameling productief is, zoals beschreven in de volgende sectie.
GC-verzamelingsmodus
U kunt een van de overbelastingen van de GC.Collect methode gebruiken die een GCCollectionMode waarde bevat om het gedrag voor een geforceerde verzameling als volgt op te geven.
GCCollectionMode Waarde |
Beschrijving |
---|---|
Default | Hiermee wordt de standaardinstelling voor garbagecollection gebruikt voor de actieve versie van .NET. |
Forced | Dwingt garbagecollection onmiddellijk op te treden. Dit komt overeen met het aanroepen van de GC.Collect() overbelasting. Het resulteert in een volledige blokkerende verzameling van alle generaties. U kunt de grote object-heap ook comprimeren door de GCSettings.LargeObjectHeapCompactionMode eigenschap in te GCLargeObjectHeapCompactionMode.CompactOnce stellen op voordat u een onmiddellijke volledige blokkerende garbagecollection afdwingt. |
Optimized | Hiermee kan de garbagecollector bepalen of de huidige tijd optimaal is om objecten vrij te maken. De garbagecollector kan bepalen dat een verzameling niet productief genoeg zou zijn om te worden gerechtvaardigd. In dat geval wordt deze geretourneerd zonder objecten vrij te maken. |
Achtergrondverzamelingen of blokkeringen
U kunt de overbelasting van de GC.Collect(Int32, GCCollectionMode, Boolean) methode aanroepen om op te geven of een geïnduceerde verzameling wordt geblokkeerd of niet. Het type verzameling dat wordt uitgevoerd, is afhankelijk van een combinatie van de methode mode
en blocking
parameters. mode
is lid van de GCCollectionMode opsomming en blocking
is een Boolean waarde. De volgende tabel bevat een overzicht van de interactie van de mode
en blocking
argumenten.
mode |
blocking = true |
blocking = false |
---|---|---|
Forced of Default | Er wordt zo snel mogelijk een blokkerende verzameling uitgevoerd. Als een achtergrondverzameling wordt uitgevoerd en de generatie 0 of 1 is, activeert de Collect(Int32, GCCollectionMode, Boolean) methode onmiddellijk een blokkerende verzameling en wordt geretourneerd wanneer de verzameling is voltooid. Als een achtergrondverzameling wordt uitgevoerd en de generation parameter 2 is, wacht de methode totdat de achtergrondverzameling is voltooid, wordt een blokkerende verzameling van de tweede generatie geactiveerd en vervolgens geretourneerd. |
Er wordt zo snel mogelijk een verzameling uitgevoerd. De Collect(Int32, GCCollectionMode, Boolean) methode vraagt een achtergrondverzameling aan, maar dit is niet gegarandeerd. Afhankelijk van de omstandigheden kan een blokkerende verzameling nog steeds worden uitgevoerd. Als er al een achtergrondverzameling wordt uitgevoerd, wordt de methode onmiddellijk geretourneerd. |
Optimized | Er kan een blokkerende verzameling worden uitgevoerd, afhankelijk van de status van de garbagecollector en de generation parameter. De garbagecollector probeert optimale prestaties te bieden. |
Er kan een verzameling worden uitgevoerd, afhankelijk van de status van de garbagecollector. De Collect(Int32, GCCollectionMode, Boolean) methode vraagt een achtergrondverzameling aan, maar dit is niet gegarandeerd. Afhankelijk van de omstandigheden kan een blokkerende verzameling nog steeds worden uitgevoerd. De garbagecollector probeert optimale prestaties te bieden. Als er al een achtergrondverzameling wordt uitgevoerd, wordt de methode onmiddellijk geretourneerd. |