Operazione di Garbage Collection per workstation e server
Il Garbage Collector si regola da sé e può funzionare in un'ampia varietà di scenari. È tuttavia possibile impostare il tipo di Garbage Collection in base alle caratteristiche del carico di lavoro. CLR fornisce i seguenti tipi di Garbage Collection:
Garbage Collection (GC) della workstation, progettato per le app client. È il sapore GC predefinito per le app autonome. Per le app ospitate, ad esempio quelle ospitate da ASP.NET, l'host determina il sapore GC predefinito.
Le operazioni di Garbage Collection per workstation possono essere eseguite in modalità simultanea o non simultanea. La modalità simultanea (o in background) consente ai thread gestiti di continuare le operazioni durante un'operazione di Garbage Collection. Garbage Collection in background sostituisce Garbage Collection simultanee in .NET Framework 4 e versioni successive.
Garbage Collection per server, per le applicazioni server che richiedono scalabilità e velocità effettiva elevata.
In .NET Core, la Garbage Collection del server può essere non simultanea o in background.
In .NET Framework 4.5 e versioni successive, la Garbage Collection del server può essere non simultanea o in background. In .NET Framework 4 e versioni precedenti, la Garbage Collection del server non è simultanea.
La seguente illustrazione mostra i thread dedicati che eseguono l'operazione di Garbage Collection in un server:
Considerazioni sulle prestazioni
GC workstation
Di seguito sono riportate alcune considerazioni su threading e prestazioni per l'operazione di Garbage Collection per workstation:
La raccolta viene eseguita nel thread dell'utente che ha attivato l'operazione di Garbage Collection e mantiene la stessa priorità. Poiché i thread dell'utente vengono in genere eseguiti con priorità normale, il Garbage Collector (eseguito in un thread con priorità normale) deve competere con altri thread per il tempo CPU. (I thread che eseguono codice nativo non vengono sospesi nella garbage collection del server o della workstation).
La Garbage Collection della workstation viene sempre usata in un computer con una sola CPU logica, indipendentemente dall'impostazione di configurazione.
GC server
Di seguito sono riportate alcune considerazioni su threading e prestazioni per l'operazione di Garbage Collection per server:
La raccolta viene eseguita su più thread dedicati. In Windows, questi thread vengono eseguiti a livello di priorità
THREAD_PRIORITY_HIGHEST
.Per ogni CPU logica vengono forniti un heap e un thread dedicato per l'esecuzione dell'operazione di Garbage Collection. Gli heap vengono raccolti contemporaneamente. Ogni heap contiene un heap degli oggetti piccoli e un heap degli oggetti grandi; è possibile accedere a tutti gli heap tramite codice utente. Gli oggetti contenuti in heap diversi possono fare riferimento l'un l'altro.
Grazie all'utilizzo congiunto di più thread di Garbage Collection, le operazioni di Garbage Collection per server saranno più veloci delle operazioni per workstation in un heap di pari dimensioni.
I segmenti di Garbage Collection per server sono spesso di dimensioni maggiori. Tuttavia, questa è solo una generalizzazione: le dimensioni dei segmenti sono specifiche dell'implementazione e soggette a modifiche. Non fare supposizioni sulle dimensioni dei segmenti allocati dal Garbage Collector durante l'ottimizzazione dell'app.
Le operazioni di Garbage Collection per server possono richiedere un utilizzo di risorse elevato. 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 vengono raccolti contemporaneamente, interferiscono tra loro, perché nella stessa CPU logica sono pianificati 12 thread. Se i processi sono attivi, non è consigliabile far usare a tutti la GC del server.
Se si eseguono centinaia di istanze di un'applicazione, è consigliabile usare operazioni di Garbage Collection per workstation con la modalità simultanea disabilitata. Si avranno meno cambi di contesto e un possibile miglioramento delle prestazioni.