Dela via


Inducerade samlingar

I de flesta fall kan skräpinsamlaren bestämma den bästa tiden för att utföra en samling, och du bör låta den köras oberoende av varandra. Det finns sällsynta situationer när en tvingad samling kan förbättra programmets prestanda. I dessa fall kan du inducera skräpinsamling med hjälp GC.Collect av metoden för att tvinga fram en skräpinsamling.

Använd metoden GC.Collect när det finns en betydande minskning av mängden minne som används vid en viss punkt i programmets kod. Om ditt program till exempel använder en komplex dialogruta som har flera kontroller kan ett samtal Collect när dialogrutan stängs förbättra prestandan genom att omedelbart frigöra det minne som används av dialogrutan. Se till att programmet inte leder till skräpinsamling för ofta, eftersom det kan minska prestandan om skräpinsamlaren försöker frigöra objekt vid icke-optimala tidpunkter. Du kan ange ett GCCollectionMode.Optimized uppräkningsvärde till Collect metoden för att samla in endast när samlingen skulle vara produktiv, enligt beskrivningen i nästa avsnitt.

GC-samlingsläge

Du kan använda en av de GC.Collect metodöverlagringar som innehåller ett GCCollectionMode värde för att ange beteendet för en tvingad samling på följande sätt.

GCCollectionMode Värde beskrivning
Default Använder standardinställningen för skräpinsamling för den version av .NET som körs.
Forced Tvingar skräpinsamling att ske omedelbart. Detta motsvarar att anropa överbelastningen GC.Collect() . Det resulterar i en fullständig blockeringssamling av alla generationer.

Du kan också komprimera den stora objekthögen GCSettings.LargeObjectHeapCompactionMode genom att ställa in egenskapen på GCLargeObjectHeapCompactionMode.CompactOnce innan du tvingar fram en omedelbar fullständig blockering av skräpinsamling.
Optimized Gör att skräpinsamlaren kan avgöra om den aktuella tiden är optimal för att frigöra objekt.

Skräpinsamlaren kan fastställa att en samling inte skulle vara tillräckligt produktiv för att motiveras, i vilket fall den kommer tillbaka utan att återta objekt.

Bakgrunds- eller blockeringssamlingar

Du kan anropa GC.Collect(Int32, GCCollectionMode, Boolean) metodens överlagring för att ange om en inducerad samling blockerar eller inte. Vilken typ av samling som utförs beror på en kombination av metodens mode och blocking parametrarna. mode är medlem i GCCollectionMode uppräkningen och blocking är ett Boolean värde. I följande tabell sammanfattas interaktionen mellan argumenten mode och blocking .

mode blocking = true blocking = false
Forced eller Default En blockerande samling utförs så snart som möjligt. Om en bakgrundssamling pågår och genereringen Collect(Int32, GCCollectionMode, Boolean) är 0 eller 1 utlöser metoden omedelbart en blockerande samling och returnerar när samlingen är klar. Om en bakgrundssamling pågår och parametern generation är 2 väntar metoden tills bakgrundssamlingen är klar, utlöser en blockerande generation 2-samling och returnerar sedan. En samling utförs så snart som möjligt. Metoden Collect(Int32, GCCollectionMode, Boolean) begär en bakgrundssamling, men detta är inte garanterat. Beroende på omständigheterna kan en blockerande samling fortfarande utföras. Om en bakgrundssamling redan pågår returnerar metoden omedelbart.
Optimized En blockerande samling kan utföras, beroende på tillståndet för skräpinsamlaren och parametern generation . Skräpinsamlaren försöker ge optimala prestanda. En samling kan utföras, beroende på skräpinsamlarens tillstånd. Metoden Collect(Int32, GCCollectionMode, Boolean) begär en bakgrundssamling, men detta är inte garanterat. Beroende på omständigheterna kan en blockerande samling fortfarande utföras. Skräpinsamlaren försöker ge optimala prestanda. Om en bakgrundssamling redan pågår returnerar metoden omedelbart.

Se även