Modalità di latenza
Per recuperare oggetti, il Garbage Collector deve arrestare tutti thread in esecuzione di un'applicazione. In alcune situazioni, ad esempio quando un'applicazione recupera dati o visualizza contenuto, un'operazione completa di Garbage Collection può verificarsi in un momento critico e può ostacolare le prestazioni. È possibile rettificare l'ingerenza del Garbage Collector impostando la proprietà GCSettings.LatencyMode su uno dei valori System.Runtime.GCLatencyMode.
La latenza si riferisce al momento dell'intrusione del Garbage Collector nell'applicazione. Durante i periodi di bassa latenza, il Garbage Collector è più conservativo e meno intrusivo nel recupero degli oggetti. Si consiglia di utilizzare la modalità GCLatencyMode.LowLatency solo per brevi periodi di tempo, quando è necessario. In caso contrario, se il sistema è in una condizione di stress della memoria, il Garbage Collector attiverà un insieme che può mettere in pausa brevemente l'applicazione e danneggiare un'operazione a livello temporale.
Durante i periodi di bassa latenza, le raccolte di generazione 2 vengono soppresse eccetto nei seguenti casi:
Il sistema riceve una notifica di memoria insufficiente dal sistema operativo.
Il codice dell'applicazione induce una raccolta chiamando il metodo GC.Collect e specificando 2 per il parametro generation.
È necessario utilizzare la modalità di latenza con applicazioni che includono un blocco di codice in esecuzione su brevi periodi di tempo e deve essere in esecuzione con le minime interruzioni dal runtime. Anche se la modalità LowLatency è progettata per essere utilizzata negli scenari che presentano alcuni vincoli temporali, non deve essere considerata una soluzione per scenari sottoposti a vincoli temporali rigidi.
Nella tabella seguente sono elencati gli scenari di applicazioni per cui i valori di GCLatencyMode sono appropriati.
Modalità di latenza |
Scenari di applicazione |
---|---|
Per applicazioni che non hanno nessuna interfaccia utente o operazioni lato server. |
|
Per la maggior parte delle applicazioni che hanno una interfaccia utente. |
|
Per le applicazioni con operazioni a breve termine, per cui il tempo riveste un'importanza significativa, durante le quali le interruzioni del Garbage Collector potrebbero rivelarsi dannose. Ad esempio, applicazioni di rendering delle animazioni o che hanno funzioni di acquisizione dei dati. |
Modalità di Garbage Collection predefinite
Se la proprietà LatencyModenon è specificata, la modalità predefinita è l'operazione di Garbage Collection in modalità simultanea su workstation. La modalità dipende dal valore di due impostazioni di configurazione di runtime:
-
Se attivata, questa impostazione specifica che Common Language Runtime esegue la Garbage Collection su workstation in un thread distinto per supportare operazioni simultanee. Per impostazione predefinita questa impostazione è attivata.
-
Se attivata, questa impostazione specifica che Common Language Runtime esegue la Garbage Collection su server; in caso contrario la esegue su workstation. È possibile attivare la Garbage Collection solo in computer basati su almeno due processori. Per impostazione predefinita, questa impostazione non è attivata.
Se questa impostazione è attivata, l'impostazione <gcConcurrent> è automaticamente disabilitata.
I valori predefiniti per GCLatencyMode sono i seguenti:
Interactive quando <gcConcurrent> è abilitata e <gcServer> è disabilitata.
Batch quando <gcConcurrent> è disabilitata o <gcServer> è abilitata.
Nota |
---|
L'operazione di Garbage Collection in modalità simultanea non è supportata nelle applicazioni che eseguono l'emulatore WOW64 x86 su sistemi a 64 bit che implementano l'architettura Intel Itanium (precedentemente denominata IA-64). |
Linee guida per l'utilizzo della bassa latenza
Quando si utilizza la modalità LowLatency, tenere in considerazione le seguenti linee guida:
Mantenere il periodo di tempo in bassa latenza più brevemente possibile.
Evitare di allocare quantità di memoria elevate durante i periodi di bassa latenza. Possono verificarsi notifiche di memoria insufficiente perché le operazioni di Garbage Collection recuperano meno oggetti.
In modalità di bassa latenza, ridurre al minimo il numero delle allocazioni effettuate, in particolare le allocazioni su Large Object Heap e oggetti bloccati.
Tenere presenti i thread che potrebbero essere in corso di allocazione. Poiché l'impostazione delle proprietà LatencyMode interessa l'intero processo, è possibile generare un'eccezione OutOfMemoryException su qualsiasi thread eventualmente in corso di allocazione.
Eseguire il wrapping del codice di bassa latenza nelle aree a esecuzione vincolata (per ulteriori informazioni, vedere aree di esecuzione vincolate).
È possibile forzare le operazioni di Garbage Collection di generazione 2 durante un periodo di bassa latenza chiamando il metodo GC.Collect(Int32, GCCollectionMode).
Vedere anche
Attività
Procedura: disabilitare l'esecuzione contemporanea della Garbage Collection