Condividi tramite


Modalità di latenza

Aggiornamento: novembre 2007

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à LatencyMode su uno dei valori 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. Gli insiemi di generazione 2 si verificano meno frequentemente, pertanto il working set dell'applicazione aumenta con il passare del tempo. Di conseguenza, è consigliabile utilizzare la modalità 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.

È 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 applicazioni che hanno operazioni a breve termine, o per le quali il tempo riveste un'importanza significativa quando le interruzioni dal Garbage Collector possono 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 disattivata.

I valori predefiniti per GCLatencyMode sono i seguenti:

  • Interactive quando <gcConcurrent> è attivata e <gcServer> è disattivata.

  • Batch quando <gcConcurrent> è disattivata o quando sia <gcConcurrent> sia <gcServer> sono attivate.

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). Per ulteriori informazioni sull'utilizzo di WOW64 nei sistemi Windows a 64 bit, vedere Running 32-bit Applications (informazioni in lingua inglese).

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 a esecuzione vincolata).

  • È 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: disattivare l'esecuzione contemporanea della Garbage Collection

Concetti

Insiemi indotti

Altre risorse

Garbage Collection