Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I de flesta fall kan skräpsamlaren bestämma den bästa tiden för att utföra en insamling, och du bör låta den köras oberoende. Det finns sällsynta situationer när en tvingad samling kan förbättra programmets prestanda. I dessa fall kan du inducera skräpinsamling genom att använda metoden GC.Collect 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 som specificerar beteendet för en forcerad insamling 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 komplett blockering 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 blockerande samlingar
Du kan anropa metodens GC.Collect(Int32, GCCollectionMode, Boolean) överlagring för att ange om den inducerade samlingen 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 insamling utförs så snart som möjligt. Om en bakgrundssamling pågår och generationen är 0 eller 1, utlöser Collect(Int32, GCCollectionMode, Boolean)-metoden omedelbart en blockerande insamling och returnerar när insamlingen ä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 insamling genomfö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. |