Share via


Skräpinsamling för arbetsstation och server

Skräpinsamlaren är självjustering och kan fungera i en mängd olika scenarier. Du kan dock ange typen av skräpinsamling baserat på arbetsbelastningens egenskaper. CLR tillhandahåller följande typer av skräpinsamling:

  • GC (Workstation Garbage Collection), som är utformad för klientappar. Det är standardsmaken för GC för fristående appar. För värdbaserade appar, till exempel de som hanteras av ASP.NET, avgör värden standard-GC-smaken.

    Arbetsstationens skräpinsamling kan vara samtidig eller icke-samtidig. Samtidig (eller bakgrund) skräpinsamling gör det möjligt för hanterade trådar att fortsätta åtgärder under en skräpinsamling. Skräpinsamling i bakgrunden ersätter samtidig skräpinsamling i .NET Framework 4 och senare versioner.

  • Server skräpinsamling, som är avsedd för serverprogram som behöver högt dataflöde och skalbarhet.

    • I .NET Core kan serverskräpinsamling vara icke-samtidig eller bakgrund.

    • I .NET Framework 4.5 och senare versioner kan serverns skräpinsamling vara icke-samtidig eller bakgrund. I .NET Framework 4 och tidigare versioner är serverns skräpinsamling inte samtidig.

Följande bild visar de dedikerade trådar som utför skräpinsamlingen på en server:

Server Garbage Collection Threads

Prestandaöverväganden

Arbetsstation GC

Följande är trådnings- och prestandaöverväganden för skräpinsamling för arbetsstationer:

  • Samlingen sker i användartråden som utlöste skräpinsamlingen och förblir med samma prioritet. Eftersom användartrådar vanligtvis körs med normal prioritet måste skräpinsamlaren (som körs på en vanlig prioritetstråd) konkurrera med andra trådar för CPU-tid. (Trådar som kör intern kod pausas inte på antingen server- eller arbetsstationens skräpinsamling.)

  • Skräpinsamling för arbetsstationer används alltid på en dator som bara har en logisk PROCESSOR, oavsett konfigurationsinställning.

Server GC

Följande är trådnings- och prestandaöverväganden för serveravfallsinsamling:

  • Samlingen sker på flera dedikerade trådar. I Windows körs dessa trådar på THREAD_PRIORITY_HIGHEST prioritetsnivå.

  • En heap och en dedikerad tråd för att utföra skräpinsamling tillhandahålls för varje logisk PROCESSOR, och heaps samlas in samtidigt. Varje heap innehåller en liten objekthög och en stor objekthög, och alla heaps kan nås med användarkod. Objekt på olika heaps kan referera till varandra.

  • Eftersom flera skräpinsamlingstrådar fungerar tillsammans är serverskräpinsamlingen snabbare än arbetsstationens skräpinsamling i samma storlek.

  • Serverskräpinsamling har ofta större storlekssegment. Detta är dock bara en generalisering: segmentstorleken är implementeringsspecifik och kan komma att ändras. Gör inte antaganden om storleken på segment som allokeras av skräpinsamlaren när du justerar din app.

  • Serverskräpinsamling kan vara resurskrävande. Anta till exempel att det finns 12 processer som använder server-GC som körs på en dator som har fyra logiska processorer. Om alla processer råkar samla in skräp samtidigt skulle de störa varandra, eftersom det skulle finnas 12 trådar schemalagda på samma logiska PROCESSOR. Om processerna är aktiva är det inte en bra idé att låta alla använda server-GC.

Om du kör hundratals instanser av ett program kan du överväga att använda arbetsstationens skräpinsamling med samtidig skräpinsamling inaktiverad. Detta resulterar i mindre kontextväxling, vilket kan förbättra prestandan.

Se även