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 |
---|---|
Per applicazioni che non hanno nessuna interfaccia utente o operazioni lato server.
|
|
Per la maggior parte delle applicazioni che hanno una interfaccia utente. |
|
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:
-
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 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.
![]() |
---|
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