Modalità di latenzaLatency modes

Per recuperare oggetti, è necessario che il Garbage Collector (GC) interrompa tutti i thread in esecuzione in un'applicazione.To reclaim objects, the garbage collector (GC) must stop all the executing threads in an application. Il periodo di tempo durante il quale il Garbage Collector è attivo viene definito latenza.The period of time during which the garbage collector is active is referred to as its latency.

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.In some situations, such as when an application retrieves data or displays content, a full garbage collection can occur at a critical time and impede performance. È possibile rettificare l'ingerenza del Garbage Collector impostando la proprietà GCSettings.LatencyMode su uno dei valori System.Runtime.GCLatencyMode.You can adjust the intrusiveness of the garbage collector by setting the GCSettings.LatencyMode property to one of the System.Runtime.GCLatencyMode values.

Impostazioni a bassa latenzaLow latency settings

Se si usa un'impostazione di latenza "bassa", l'Garbage Collector inserirà un minor numero di risorse nell'applicazione.Using a "low" latency setting means the garbage collector intrudes less in your application. L'operazione di Garbage Collection è più conservativa sul recupero della memoria.Garbage collection is more conservative about reclaiming memory.

Tramite l'enumerazione System.Runtime.GCLatencyMode vengono fornite due impostazioni a bassa latenza:The System.Runtime.GCLatencyMode enumeration provides two low latency settings:

  • GCLatencyMode. LowLatency disattiva le raccolte di generazione 2 ed esegue solo le raccolte di generazione 0 e 1.GCLatencyMode.LowLatency suppresses generation 2 collections and performs only generation 0 and 1 collections. Può essere usato solo per brevi periodi di tempo.It can be used only for short periods of time. In caso di lunghi periodi, se viene usata una quantità elevata di memoria, tramite il Garbage Collector verrà attivata una raccolta mediante la quale è possibile mettere in pausa brevemente l'applicazione e interrompere un'operazione critica rispetto al tempo.Over longer periods, if the system is under memory pressure, the garbage collector will trigger a collection, which can briefly pause the application and disrupt a time-critical operation. Questa impostazione è disponibile solo per le operazioni di Garbage Collection per workstation.This setting is available only for workstation garbage collection.

  • GCLatencyMode. SustainedLowLatency evita le raccolte di primo piano di generazione 2 ed esegue solo le raccolte di generazione 0, 1 e di seconda generazione in background.GCLatencyMode.SustainedLowLatency suppresses foreground generation 2 collections and performs only generation 0, 1, and background generation 2 collections. Può essere usato per periodi di tempo più lunghi ed è disponibile per le operazioni di Garbage Collection per workstation e per server.It can be used for longer periods of time, and is available for both workstation and server garbage collection. Questa impostazione non può essere utilizzata se Garbage Collection in background è disabilitata.This setting cannot be used if background garbage collection is disabled.

Durante i periodi di bassa latenza, le raccolte di generazione 2 vengono soppresse eccetto nei seguenti casi:During low latency periods, generation 2 collections are suppressed unless the following occurs:

  • Il sistema riceve una notifica di memoria insufficiente dal sistema operativo.The system receives a low memory notification from the operating system.

  • Il codice dell'applicazione induce una raccolta chiamando il metodo GC.Collect e specificando 2 per il parametro generation.Application code induces a collection by calling the GC.Collect method and specifying 2 for the generation parameter.

ScenariScenarios

La tabella seguente elenca gli scenari di applicazione per l'uso dei valori GCLatencyMode:The following table lists the application scenarios for using the GCLatencyMode values:

Modalità di latenzaLatency mode Scenari di applicazioneApplication scenarios
Batch Per le applicazioni che non hanno alcuna interfaccia utente o operazioni lato server.For applications that have no user interface (UI) or server-side operations.

Quando Garbage Collection in background è disabilitato, questa è la modalità predefinita per workstation e server Garbage Collection.When background garbage collection is disabled, this is the default mode for workstation and server garbage collection. in modalità Batch viene inoltre eseguito l'override dell'impostazione gcConcurrent , ovvero si evitano raccolte in background o simultanee.Batch mode also overrides the gcConcurrent setting, that is, it prevents background or concurrent collections.
Interactive Per la maggior parte delle applicazioni che hanno una interfaccia utente.For most applications that have a UI.

Questa è la modalità predefinita per workstation e server Garbage Collection.This is the default mode for workstation and server garbage collection. Tuttavia, se un'app è ospitata, le impostazioni Garbage Collector del processo di hosting hanno la precedenza.However, if an app is hosted, the garbage collector settings of the hosting process take precedence.
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.For applications that have short-term, time-sensitive operations during which interruptions from the garbage collector could be disruptive. Ad esempio, le applicazioni che eseguono il rendering delle animazioni o delle funzioni di acquisizione dei dati.For example, applications that render animations or data acquisition functions.
SustainedLowLatency Per le applicazioni con operazioni per cui i tempi sono importanti per una durata contenuta, ma potenzialmente lunga, durante la quale le interruzioni del Garbage Collector potrebbero rivelarsi dannose.For applications that have time-sensitive operations for a contained but potentially longer duration of time during which interruptions from the garbage collector could be disruptive. Ad esempio, le applicazioni per cui sono richiesti tempi di risposta rapidi come i cambiamenti dei dati di mercato durante le ore di negoziazione.For example, applications that need quick response times as market data changes during trading hours.

Questa modalità comporta dimensioni dell'heap gestito maggiori rispetto ad altre.This mode results in a larger managed heap size than other modes. Poiché non consente di comprimere l'heap gestito, è possibile avere una maggiore frammentazione.Because it does not compact the managed heap, higher fragmentation is possible. Assicurarsi che sia disponibile memoria sufficiente.Ensure that sufficient memory is available.

Linee guida per l'utilizzo della bassa latenzaGuidelines for using low latency

Quando si usa la modalità GCLatencyMode. LowLatency , tenere presenti le linee guida seguenti:When you use GCLatencyMode.LowLatency mode, consider the following guidelines:

  • Mantenere il periodo di tempo in bassa latenza più brevemente possibile.Keep the period of time in low latency as short as possible.

  • Evitare di allocare quantità di memoria elevate durante i periodi di bassa latenza.Avoid allocating high amounts of memory during low latency periods. Possono verificarsi notifiche di memoria insufficiente perché le operazioni di Garbage Collection recuperano meno oggetti.Low memory notifications can occur because garbage collection reclaims fewer objects.

  • In modalità a bassa latenza, ridurre al minimo il numero di nuove allocazioni, in particolare le allocazioni sull'heap degli oggetti grandi e sugli oggetti bloccati.While in the low latency mode, minimize the number of new allocations, in particular allocations onto the large object heap and pinned objects.

  • Tenere presenti i thread che potrebbero essere in corso di allocazione.Be aware of threads that could be allocating. Poiché l'impostazione della proprietà LatencyMode è a livello di processo, OutOfMemoryException eccezioni possono essere generate in qualsiasi thread che sta allocando.Because the LatencyMode property setting is process-wide, OutOfMemoryException exceptions can be generated on any thread that is allocating.

  • Eseguire il wrapping del codice a bassa latenza nelle aree a esecuzione vincolata.Wrap the low latency code in constrained execution regions. Per altre informazioni, vedere aree di esecuzione vincolate.For more information, see Constrained execution regions.

  • È possibile forzare le operazioni di Garbage Collection di generazione 2 durante un periodo di bassa latenza chiamando il metodo GC.Collect(Int32, GCCollectionMode).You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

Vedere ancheSee also