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();
}
}