memberInfoCacheCreation MDA
注意
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
创建 MemberInfo 缓存时,将激活 memberInfoCacheCreation
托管调试助手 (MDA)。 这一点强烈表明程序正在使用资源昂贵的反射功能。
症状
由于程序正在使用资源昂贵的反射,所以程序的工作集增加。
原因
将涉及 MemberInfo 对象的反射操作视作资源昂贵的反射,因为这些操作必须读取存储在冷页中的元数据,并且通常指示程序正在使用某种类型的后期绑定方案。
解决方法
先启用此 MDA,再在调试程序中运行代码或在激活 MDA 时附加一个调试程序,即可确定程序中正在使用反射的位置。 在调试程序下将获得堆栈跟踪,它显示创建 MemberInfo 缓存的位置,从该位置可以确定程序正在使用反射的位置。
该解决方案依赖代码的目标。 此 MDA 提醒你,程序具有后期绑定方案。 可能希望确定能否替换早期绑定方案,或考虑后期绑定方案的性能。
对运行时的影响
创建的每个 MemberInfo 缓存都可激活此 MDA。 性能影响可以忽略不计。
输出
该 MDA 输出一条消息,指示已创建 MemberInfo 缓存。 使用调试程序器获取堆栈跟踪,堆栈跟踪显示程序正在使用反射的位置。
Configuration
<mdaConfig>
<assistants>
<memberInfoCacheCreation/>
</assistants>
</mdaConfig>
示例
此示例代码将激活 memberInfoCacheCreation
MDA。
using System;
public class Exe
{
public static void Main()
{
typeof(object).GetMethods();
}
}