Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per recuperare gli oggetti, il garbage collector (GC) deve arrestare tutti i thread in esecuzione all'interno di un'applicazione. Il periodo di tempo durante il quale il Garbage Collector è attivo viene definito latenza.
In alcune situazioni, ad esempio quando un'applicazione recupera i dati o visualizza il contenuto, un'operazione completa di Garbage Collection può verificarsi in un momento critico e compromettere le prestazioni. È possibile modificare l'intrusività del Garbage Collector impostando la GCSettings.LatencyMode proprietà su uno dei System.Runtime.GCLatencyMode valori.
Impostazioni a bassa latenza
L'uso di un'impostazione di latenza "bassa" significa che il Garbage Collector intrudisce meno nell'applicazione. La raccolta dei rifiuti è più prudente nel recupero della memoria.
L'enumerazione System.Runtime.GCLatencyMode fornisce due impostazioni a bassa latenza:
GCLatencyMode.LowLatency elimina le raccolte di seconda generazione ed esegue solo raccolte di generazione 0 e 1. Può essere usato solo per brevi periodi di tempo. Nel lungo periodo, se il sistema è sotto pressione di memoria, il garbage collector attiverà una procedura di raccolta, che può brevemente sospendere l'applicazione e interrompere un'operazione critica a livello temporale. Questa impostazione è disponibile solo per la raccolta dei rifiuti della workstation.
GCLatencyMode.SustainedLowLatency elimina le raccolte di generazione 2 in primo piano ed esegue solo raccolte di generazione 0, 1 e generazione 2 in background. Può essere utilizzato per periodi di tempo più lunghi ed è disponibile sia per la workstation che per la raccolta dei rifiuti del server. Questa impostazione non può essere usata se la Garbage Collection in background è disabilitata.
Durante periodi di bassa latenza, le raccolte di seconda generazione vengono eliminate a meno che non si verifichi quanto segue:
Il sistema riceve una notifica di memoria insufficiente dal sistema operativo.
Il codice dell'applicazione induce una raccolta chiamando il GC.Collect metodo e specificando 2 per il
generation
parametro .
Scenari
La tabella seguente elenca gli scenari dell'applicazione per l'uso dei GCLatencyMode valori:
Modalità latenza | Scenari applicativi |
---|---|
Batch | Per le applicazioni che non hanno alcuna interfaccia utente o operazioni sul lato server. Quando la funzione di Garbage Collection in background è disabilitata, questa è la modalità predefinita per la Garbage Collection di workstation e server. Batch mode esegue anche l'override dell'impostazione gcConcurrent , ovvero impedisce raccolte in background o simultanee. |
Interactive | Per la maggior parte delle applicazioni con un'interfaccia utente. Si tratta della modalità predefinita per la raccolta dei rifiuti di workstation e server. Tuttavia, se un'app è ospitata, le impostazioni di Garbage Collector del processo di hosting hanno la precedenza. |
LowLatency | Per le applicazioni con operazioni a breve termine e sensibili al tempo, durante le quali le interruzioni del Garbage Collector potrebbero essere problematiche. Ad esempio, applicazioni che eseguono il rendering di animazioni o funzioni di acquisizione dei dati. |
SustainedLowLatency | Per le applicazioni che hanno operazioni sensibili al tempo durante un periodo contenuto ma potenzialmente più lungo, in cui le interruzioni del garbage collector potrebbero essere problematiche. Ad esempio, le applicazioni che richiedono tempi di risposta rapidi quando i dati di mercato cambiano durante l'orario di trading. Questa modalità comporta una dimensione dell'heap gestita maggiore rispetto ad altre modalità. Dal momento che non compatta l'heap gestito, è possibile avere una frammentazione più elevata. Assicurarsi che sia disponibile memoria sufficiente. |
Linee guida per l'uso di bassa latenza
Quando si usa la modalità GCLatencyMode.LowLatency , prendere in considerazione le linee guida seguenti:
Mantenere il più breve possibile il periodo di tempo in bassa latenza.
Evitare di allocare quantità elevate di memoria durante periodi di bassa latenza. È possibile che si verifichino notifiche di memoria insufficiente perché Garbage Collection recupera un numero inferiore di oggetti.
Nella modalità a bassa latenza, ridurre al minimo nuove allocazioni, in particolare le allocazioni nell'heap di oggetti di grandi dimensioni e gli oggetti bloccati.
Prestare attenzione ai thread che potrebbero effettuare allocazioni. Poiché l'impostazione della LatencyMode proprietà è valida per l'intero processo, OutOfMemoryException è possibile generare eccezioni in qualsiasi thread che sta allocando.
Racchiudere il codice a bassa latenza nelle aree di esecuzione vincolate. Per altre informazioni, vedere Aree di esecuzione vincolate.
È possibile forzare le raccolte di seconda generazione durante un periodo di bassa latenza chiamando il GC.Collect(Int32, GCCollectionMode) metodo .