Compartir a través de


MDA de memberInfoCacheCreation

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.

El asistente para la depuración administrada (MDA) memberInfoCacheCreation se activa cuando se crea una caché de MemberInfo. Esto es una indicación clara de un programa que está usando características de reflexión que consumen muchos recursos.

Síntomas

El espacio de trabajo de un programa aumenta porque el programa está usando reflexión que consume muchos recursos.

Causa

Las operaciones de reflexión que implican dos objetos MemberInfo se consideran que consumen muchos recursos porque deben leer metadatos que se almacenan en páginas frías y en general indican que el programa usa algún tipo de escenario enlazado en tiempo de ejecución.

Solución

Puede determinar dónde se usa la reflexión en su programa si habilita este MDA y, después, ejecuta el código en un depurador o lo adjunta con un depurador cuando se activa el MDA. Bajo un depurador obtendrá un seguimiento de pila en el que se muestra dónde se creó la caché de MemberInfo y desde allí puede determinar dónde usa la reflexión el programa.

La resolución depende de los objetivos del código. Este MDA le avisa de que el programa tiene un escenario enlazado en tiempo de ejecución. Es posible que quiera determinar si puede sustituir un escenario enlazado en tiempo de compilación o considerar el rendimiento del escenario enlazado en tiempo de ejecución.

Efecto en el Runtime

Este MDA se activa para cada caché de MemberInfo que se crea. El rendimiento se ve afectado de forma insignificante.

Output

El MDA genera un mensaje que indica que se creó la caché de MemberInfo. Use un depurador para realizar un seguimiento de pila en el que se muestre dónde usa la reflexión el programa.

Configuración

<mdaConfig>
  <assistants>
    <memberInfoCacheCreation/>
  </assistants>
</mdaConfig>

Ejemplo

Este código de ejemplo activará el MDA memberInfoCacheCreation.

using System;

public class Exe
{
    public static void Main()
    {
        typeof(object).GetMethods();
    }
}

Consulte también