Modos de latenciaLatency Modes

Para reclamar objetos, el recolector de elementos no utilizados debe detener todos los subprocesos en ejecución en una aplicación.To reclaim objects, the garbage collector must stop all the executing threads in an application. En algunos casos, como cuando una aplicación recupera datos o muestra contenido, la recolección completa de elementos no utilizados puede producirse en un momento crítico y reducir el rendimiento.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. Puede ajustar la tendencia a la intrusión del recolector de elementos no utilizados estableciendo la propiedad GCSettings.LatencyMode en uno de los valores de 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.

Latencia es el tiempo que el recolector de elementos no utilizados entra en su aplicación.Latency refers to the time that the garbage collector intrudes in your application. Durante los períodos de latencia baja, el recolector de elementos no utilizados es más conservador y menos intrusivo en la reclamación de objetos.During low latency periods, the garbage collector is more conservative and less intrusive in reclaiming objects. La enumeración System.Runtime.GCLatencyMode proporciona dos opciones de configuración de latencia baja:The System.Runtime.GCLatencyMode enumeration provides two low latency settings:

  • LowLatency suprime las recolecciones de generación 2 y realiza solo las recolecciones de generación 0 y 1.LowLatency suppresses generation 2 collections and performs only generation 0 and 1 collections. Se puede usar solo durante breves períodos de tiempo.It can be used only for short periods of time. En períodos más largos, si la memoria del sistema está bajo presión, el recolector de elementos no utilizados activará una colección que puede pausar brevemente la aplicación e interrumpir una operación crítica en el tiempo.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. Esta opción está disponible solo para la recopilación de elementos no utilizados de estación de trabajo.This setting is available only for workstation garbage collection.

  • SustainedLowLatency suprime las recolecciones de generación 2 de primer plano y realiza solo las recolecciones de generación 0, 1 y las recolecciones de generación 2 de fondo.SustainedLowLatency suppresses foreground generation 2 collections and performs only generation 0, 1, and background generation 2 collections. Se puede usar durante periodos más largos de tiempo y está disponible para la recolección de elementos utilizados de estación de trabajo y de servidor.It can be used for longer periods of time, and is available for both workstation and server garbage collection. Esta opción de configuración no se puede usar si la recolección de elementos no utilizados simultánea está deshabilitada.This setting cannot be used if concurrent garbage collection is disabled.

Durante los períodos de latencia baja, se suprimen las recolecciones de generación 2 a menos que ocurra lo siguiente:During low latency periods, generation 2 collections are suppressed unless the following occurs:

  • El sistema recibe una notificación de memoria insuficiente desde el sistema operativo.The system receives a low memory notification from the operating system.

  • El código de aplicación induce una recolección mediante una llamada al método GC.Collect y especifica 2 en el parámetro generation.Your application code induces a collection by calling the GC.Collect method and specifying 2 for the generation parameter.

En la tabla siguiente se enumeran los escenarios de aplicación en los que se usan los valores de GCLatencyMode.The following table lists the application scenarios for using the GCLatencyMode values.

Modo de latenciaLatency mode Escenarios de aplicaciónApplication scenarios
Batch Para las aplicaciones que no tienen interfaz de usuario u operaciones de servidor.For applications that have no UI or server-side operations.

Este es el modo predeterminado cuando la recolección de elementos no utilizados simultánea está deshabilitada.This is the default mode when concurrent garbage collection is disabled.
Interactive Para la mayoría de las aplicaciones que tienen una interfaz de usuario.For most applications that have a UI.

Este es el modo predeterminado cuando la recolección de elementos no utilizados simultánea está habilitada.This is the default mode when concurrent garbage collection is enabled.
LowLatency Para aplicaciones que tienen operaciones a corto plazo sujetas a limitación temporal durante las cuales las interrupciones del recolector de elementos no utilizados podrían ser perjudiciales.For applications that have short-term, time-sensitive operations during which interruptions from the garbage collector could be disruptive. Por ejemplo, las aplicaciones que realizan funciones de adquisición de datos o representación de animación.For example, applications that do animation rendering or data acquisition functions.
SustainedLowLatency Para aplicaciones que tienen operaciones sujetas a limitación temporal con una duración limitada pero posiblemente larga durante las cuales las interrupciones del recolector de elementos no utilizados podrían ser perjudiciales.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. Por ejemplo, las aplicaciones que necesitan tiempos de respuesta rápidos, como los cambios de los datos del mercado durante las horas de comercio.For example, applications that need quick response times as market data changes during trading hours.

Este modo produce montón administrado de mayor tamaño que otros modos.This mode results in a larger managed heap size than other modes. Como no compacta el montón administrado, es posible una fragmentación mayor.Because it does not compact the managed heap, higher fragmentation is possible. Asegúrese de que hay suficiente memoria disponible.Ensure that sufficient memory is available.

Directrices para usar una latencia bajaGuidelines for Using Low Latency

Cuando use el modo LowLatency, tenga en cuenta las siguientes directrices:When you use LowLatency mode, consider the following guidelines:

  • Haga que el período de tiempo de latencia baja sea lo más corto posible.Keep the period of time in low latency as short as possible.

  • Evite asignar gran cantidad de memoria durante los períodos de latencia baja.Avoid allocating high amounts of memory during low latency periods. Se pueden producir notificaciones de memoria insuficiente porque la recolección de elementos no utilizados reclama menos objetos.Low memory notifications can occur because garbage collection reclaims fewer objects.

  • Mientras esté en modo de latencia baja, minimice el número de asignaciones que realiza, en particular las asignaciones en el montón de objetos grandes y de objetos anclados.While in the low latency mode, minimize the number of allocations you make, in particular allocations onto the Large Object Heap and pinned objects.

  • Tenga en cuenta los subprocesos que podrían estar realizando asignaciones.Be aware of threads that could be allocating. Como el valor de la propiedad LatencyMode se aplica a todo el proceso, podría generar una OutOfMemoryException en cualquier subproceso que pueda estar realizando asignaciones.Because the LatencyMode property setting is process-wide, you could generate an OutOfMemoryException on any thread that may be allocating.

  • Encapsule el código de latencia baja en regiones de ejecución restringidas (para obtener más información, consulte Regiones de ejecución restringidas).Wrap the low latency code in constrained execution regions (for more information, see Constrained Execution Regions).

  • Para forzar las recolecciones de generación 2 durante un período de latencia baja, llame al método GC.Collect(Int32, GCCollectionMode).You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

Vea tambiénSee also