Compartir por


Modos de latencia

Para reclamar objetos, el recolector de elementos no utilizados (GC) debe detener todos los subprocesos en ejecución en una aplicación. El período de tiempo durante el que el recolector de basura está activo se conoce como su latencia.

En algunas situaciones, como cuando una aplicación recupera datos o muestra contenido, una recolección completa de elementos no utilizados puede producirse en un momento crítico e impedir el rendimiento. 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.

Configuración de baja latencia

El uso de una configuración de latencia "baja" significa que el recolector de elementos no utilizados intruye menos en la aplicación. La recolección de basura es más conservadora respecto a la recuperación de memoria.

La System.Runtime.GCLatencyMode enumeración proporciona dos valores de latencia baja:

  • GCLatencyMode.LowLatency suprime las colecciones de generación 2 y realiza solo colecciones de generación 0 y 1. Solo se puede usar durante breves períodos de tiempo. Con el tiempo, si el sistema está bajo presión de memoria, el recolector de basura iniciará una recolección, lo que puede pausar brevemente la aplicación e interrumpir una operación crítica en cuanto al tiempo. Esta configuración solo está disponible para la recolección de basura en estaciones de trabajo.

  • GCLatencyMode.SustainedLowLatency suprime las colecciones de generación 2 en primer plano y realiza solo colecciones de generación 0, 1, y de generación 2 en segundo plano. Se puede usar durante períodos de tiempo más largos y está disponible tanto para la recolección de basura en estaciones de trabajo como en servidores. Esta configuración no se puede usar si la recolección de basura en segundo plano está deshabilitada.

Durante los períodos de baja latencia, se suprimen las colecciones de generación 2 a menos que se produzca lo siguiente:

  • El sistema recibe una notificación de memoria baja del sistema operativo.

  • El código de aplicación induce una colección llamando al GC.Collect método y especificando 2 para el generation parámetro .

Escenarios

En la tabla siguiente se enumeran los escenarios de aplicación para usar los GCLatencyMode valores:

Modo de latencia Escenarios de aplicación
Batch Para las aplicaciones que no tienen ninguna interfaz de usuario (UI) ni operaciones del lado servidor.

Cuando la recolección de elementos no utilizados en segundo plano está deshabilitada, este es el modo predeterminado para la recolección de elementos no utilizados de estación de trabajo y servidor. Batch el modo también invalida la configuración gcConcurrent , es decir, impide colecciones simultáneas o en segundo plano.
Interactive Para la mayoría de las aplicaciones que tienen una interfaz de usuario.

Este es el modo predeterminado para la recolección de elementos no utilizados de estación de trabajo y servidor. Sin embargo, si se hospeda una aplicación, la configuración del recolector de elementos no utilizados del proceso de hospedaje tiene prioridad.
LowLatency En el caso de las aplicaciones que tienen operaciones a corto plazo y sensibles al tiempo durante las que las interrupciones del recolector de elementos no utilizados podrían ser perjudiciales. Por ejemplo, las aplicaciones que representan animaciones o funciones de adquisición de datos.
SustainedLowLatency Para las aplicaciones que tienen operaciones sensibles al tiempo durante un período controlado pero que podría extenderse, en el que las interrupciones del recolector de basura podrían ser perjudiciales. Por ejemplo, las aplicaciones que necesitan tiempos de respuesta rápidos a medida que cambian los datos del mercado durante las horas de negociación.

Este modo produce montón administrado de mayor tamaño que otros modos. Dado que no compacta el montón administrado, es posible una mayor fragmentación. Asegúrese de que haya suficiente memoria disponible.

Directrices para usar baja latencia

Al usar el modo GCLatencyMode.LowLatency , tenga en cuenta las siguientes directrices:

  • Mantenga el período de tiempo en baja latencia lo más corto posible.

  • Evite asignar grandes cantidades de memoria durante períodos de baja latencia. Las notificaciones de memoria baja pueden ocurrir porque la recolección de basura recupera menos objetos.

  • En modo de baja latencia, minimice el número de nuevas asignaciones, en particular las asignaciones al montón de objetos grandes y los objetos anclados.

  • Tenga en cuenta los subprocesos que podrían estar realizando asignaciones. Como el valor de la propiedad LatencyMode se aplica a todo el proceso, se pueden generar excepciones OutOfMemoryException en cualquier subproceso que esté realizando asignaciones.

  • Envuelva el código de baja latencia en regiones de ejecución restringidas. Para más información, consulte Regiones de ejecución restringidas.

  • Puede forzar las colecciones de generación 2 durante un período de latencia baja llamando al método GC.Collect(Int32, GCCollectionMode).

Consulte también