memberInfoCacheCreation MDA
memberInfoCacheCreation 托管调试助手 (MDA) 在创建 MemberInfo 缓存时被激活。 这种强烈迹象表明程序正在利用资源昂贵的反射功能。
症状
程序的工作集增加了,因为程序正在使用资源昂贵的反射。
原因
涉及 MemberInfo 对象的反射操作被认为是资源昂贵的,因为它们必须读取存储在冷页 (cold page) 中的元数据,并且它们一般指示程序正在使用某种类型的后期绑定方案。
解决方法
通过启用此 MDA 然后在调试器中运行代码,或者在激活 MDA 时附加一个调试器,您可以确定程序中正在使用反射的位置。 在调试器下将获得堆栈跟踪,该跟踪表明 MemberInfo 缓存的创建位置,并且从该位置可以确定程序正在使用反射的位置。
该解决方案依赖代码的目标。 此 MDA 警告您程序具有后期绑定方案。 您可能想要确定能否替换早期绑定方案,或考虑后期绑定方案的性能。
对运行时的影响
所创建的每个 MemberInfo 缓存都将激活此 MDA。 性能影响可忽略。
Output
该 MDA 输出一条消息,指示已创建 MemberInfo 缓存。 可使用调试器获取堆栈跟踪,该跟踪表明程序中正在使用反射的位置。
配置
<mdaConfig>
<assistants>
<memberInfoCacheCreation/>
</assistants>
</mdaConfig>
示例
此代码示例将激活 memberInfoCacheCreation MDA。
using System;
public class Exe
{
public static void Main()
{
typeof(object).GetMethods();
}
}