Compartir a través de


Modos de latencia

Para reclamar objetos, el recolector de elementos no utilizados debe detener todos los subprocesos de ejecución de una aplicación. En algunos casos, como cuando una aplicación recupera datos o muestra contenido, se puede producir una recolección de elementos no utilizados completa en un momento crítico que afecte al 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.

La latencia hace referencia al momento en que el recolector de elementos no utilizados irrumpe en su aplicación. Durante los períodos de latencia baja, el recolector de elementos no utilizados es más conservador y menos intruso a la hora de reclamar objetos. Se recomienda utilizar el modo GCLatencyMode.LowLatency únicamente durante el corto período de tiempo en que sea necesario. De lo contrario, si el sistema necesita memoria, el recolector de elementos no utilizados activará una colección, lo que puede detener brevemente la aplicación e interrumpir una operación crítica en el tiempo.

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

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

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

Utilice el modo de latencia con aplicaciones que incluyan un bloque de código que se ejecuta en un período breve de tiempo y que deba ejecutarse con interrupciones mínimas desde el motor en tiempo de ejecución. Aunque el modo LowLatency está diseñado para ser utilizado en escenarios donde hay algunas restricciones de tiempo, no está diseñado para ser una solución en escenarios donde hay restricciones estrictas de tiempo real.

En la tabla siguiente se muestran los escenarios de aplicación para los que los valores GCLatencyMode resultan adecuados.

Modo de latencia

Escenarios de aplicación

Batch

Para las aplicaciones que no tienen interfaz de usuario ni operaciones del servidor.

Interactive

Para la mayoría de las aplicaciones que tienen una interfaz de usuario.

LowLatency

Para aplicaciones que tienen operaciones a corto plazo y sensibles al tiempo para las que las interrupciones del recolector de elementos no utilizados podrían ser perjudiciales. Por ejemplo, aplicaciones que realizan funciones de representación de animación o de adquisición de datos.

Modos de recolección de elementos no utilizados predeterminados

Si no se especifica la propiedad LatencyMode, el modo predeterminado es la recolección simultánea de elementos no utilizados de estación de trabajo. El modo depende del valor de dos opciones de configuración en tiempo de ejecución:

  • <gcConcurrent>

    Si está habilitado, este valor especifica que Common Language Runtime ejecuta la recolección de elementos no utilizados de estación de trabajo en un subproceso independiente que admite operaciones simultáneas. Este valor está habilitado de forma predeterminada.

  • <gcServer>

    Si está habilitado, este valor especifica que Common Language Runtime ejecuta la recolección de elementos no utilizados de servidor; de lo contrario, ejecuta la recolección de elementos no utilizados de estación de trabajo. Solo puede habilitar la recolección de elementos no utilizados de servidor en equipos con dos o más procesadores. No está habilitado de forma predeterminada.

    Si se habilita este valor, <gcConcurrent> se deshabilita automáticamente.

Los valores predeterminados de GCLatencyMode son los siguientes:

  • Interactive cuando <gcConcurrent> está habilitado y <gcServer> está deshabilitado.

  • Batch cuando <gcConcurrent> está deshabilitado y <gcServer> está habilitado.

NotaNota

No se admite la recolección simultánea de elementos no utilizados en aplicaciones en las que se ejecuta el emulador WOW64 x86 en sistemas de 64 bits y que implementan la arquitectura Intel Itanium (denominada anteriormente IA-64).

Instrucciones de uso de la latencia baja

Tenga en cuenta la siguiente información siempre que utilice el modo LowLatency:

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

  • Evite asignar grandes cantidades de memoria durante los períodos de latencia baja. Se pueden producir notificaciones de memoria insuficiente debido a que la recolección de elementos no utilizados reclama menos objetos.

  • Mientras esté en modo de latencia baja, minimice el número de asignaciones, en particular las asignaciones al montón de objetos grandes y objetos anclados.

  • Tenga en cuenta los subprocesos que podría estar asignando. Debido a que el valor de la propiedad LatencyMode se aplica a todo el proceso, podría generar una OutOfMemoryException en cualquier subproceso que se esté asignando.

  • Incluya código de latencia baja en regiones de ejecución restringidas (para obtener más información, vea regiones de ejecución restringidas).

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

Vea también

Tareas

Cómo: Deshabilitar la recolección simultánea de elementos no utilizados

Conceptos

Colecciones inducidas

recolección de elementos no utilizados