Condividi tramite


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

Batch

Per applicazioni che non hanno nessuna interfaccia utente o operazioni lato server.

Interactive

Per la maggior parte delle applicazioni che hanno una interfaccia utente.

LowLatency

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:

  • <gcConcurrent>

    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.

  • <gcServer>

    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.

NotaNota

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

Concetti

Insiemi indotti

Garbage Collection