Condividi tramite


Garbage Collection di workstation e server

Garbage Collector è auto-ottimizzante e può funzionare in un'ampia gamma di scenari. È tuttavia possibile impostare il tipo di Garbage Collection in base alle caratteristiche del carico di lavoro. CLR fornisce i tipi di Garbage Collection seguenti:

  • Garbage Collection (GC) della workstation, progettato per le app client. È la versione GC predefinita per le app autonome. Per le app ospitate, ad esempio quelle ospitate da ASP.NET, l'host determina il tipo GC predefinito.

    La raccolta dei rifiuti della postazione di lavoro può essere concorrente o non concorrente. La raccolta dei rifiuti simultanea (o in background) consente ai thread gestiti di continuare le operazioni durante la raccolta dei rifiuti. Garbage Collection in background sostituisce la Garbage Collection simultanea nel .NET Framework 4 e versioni successive.

  • Raccolta dei rifiuti del server, destinata alle applicazioni server che richiedono alto rendimento e scalabilità elevate.

    • In .NET Core il Garbage Collection del server può essere non simultaneo o in background.

    • In .NET Framework 4.5 e versioni successive, il Garbage Collection del server può essere non simultaneo o in background. In .NET Framework 4 e nelle versioni precedenti, la raccolta dei rifiuti nel server non è concorrente.

La figura seguente illustra i thread dedicati che eseguono l'operazione di Garbage Collection in un server:

Thread del Garbage Collection del server

Considerazioni sulle prestazioni

Postazione di lavoro GC

Di seguito sono riportate le considerazioni relative al threading e alle prestazioni per la Garbage Collection della workstation:

  • La raccolta viene eseguita nel thread utente che ha attivato l'operazione di Garbage Collection e rimane alla stessa priorità. Poiché i thread utente vengono in genere eseguiti con priorità normale, il Garbage Collector (che viene eseguito su un thread con priorità normale) deve competere con altri thread per il tempo di CPU. I thread che eseguono codice nativo non vengono sospesi durante la raccolta dei rifiuti sul server o sul workstation.

  • La raccolta dei rifiuti della workstation viene sempre utilizzata su un computer con una sola CPU logica, indipendentemente dall'impostazione di configurazione.

Server GC

Di seguito sono riportate le considerazioni relative al threading e alle prestazioni per la raccolta dei rifiuti del server.

  • La raccolta viene eseguita su più thread dedicati. In Windows questi thread vengono eseguiti a THREAD_PRIORITY_HIGHEST livello di priorità.

  • Per ciascuna CPU logica vengono forniti un heap e un thread dedicato per eseguire la raccolta dei rifiuti, e gli heap vengono raccolti allo stesso tempo. Ogni heap contiene un heap di oggetti di piccole dimensioni e un heap di oggetti di grandi dimensioni ed è possibile accedere a tutti gli heap tramite codice utente. Gli oggetti su heap diversi possono fare riferimento l'uno all'altro.

  • Poiché più thread di raccolta dei rifiuti lavorano insieme, la raccolta dei rifiuti in modalità server è più veloce rispetto alla modalità workstation su heap di dimensioni uguali.

  • Spesso, la raccolta dei detriti del server ha segmenti di dimensioni maggiori. Tuttavia, si tratta solo di una generalizzazione: le dimensioni del segmento sono specifiche dell'implementazione e sono soggette a modifiche. Non fare ipotesi sulle dimensioni dei segmenti allocati dal Garbage Collector durante l'ottimizzazione dell'app.

  • L'operazione di Garbage Collection del server può richiedere un utilizzo intensivo delle risorse. Si supponga, ad esempio, che siano presenti 12 processi che usano server GC in esecuzione in un computer con quattro CPU logiche. Se tutti i processi raccolgono i dati inutili contemporaneamente, interferiscono tra loro, poiché ci sarebbero 12 thread pianificati sulla stessa CPU logica. Se i processi sono attivi, non è una buona idea farli tutti usare il server GC.

Se esegui centinaia di istanze di un'applicazione, è consigliabile usare la raccolta di rifiuti per postazione di lavoro con la raccolta di rifiuti simultanea disabilitata. Ciò comporterà un cambio di contesto inferiore, che può migliorare le prestazioni.

Vedere anche