可以清除还是禁用.NET MethodInfo缓存?

时间:2010-06-17 20:27:55

标签: .net caching assemblies types methodinfo

MSDN,调用Type.GetMethods()会将反映的方法信息存储在MemberInfo缓存中,因此不必再执行昂贵的操作。

我有一个扫描程序集/类型的应用程序,查找与给定规范匹配的方法。问题是内存消耗显着增加(特别是对于大量引用的程序集),因为.NET挂起了方法元数据。

有没有办法清除或禁用此MemberInfo缓存?

2 个答案:

答案 0 :(得分:2)

我不这么认为。一个技巧是在AppDomain中完成这项工作。您可以创建一个新的AppDomain,完成所有工作,报告结果,然后卸载AppDomain。这不是一项简单的任务,而且速度相当慢,但它是有效卸载程序集或与反射相关的缓存的唯一方法(我知道)。

答案 1 :(得分:0)

如果您不需要使用Assembly.ReflectionOnlyLoad(string)执行方法,可以稍微减少内存消耗。卸载程序集仍然需要卸载AppDomain,但是,如果您的问题是泄漏(您的程序保持打开状态,用户不断向您传递新程序集以无限期查看),而不仅仅是高内存使用,这将无济于事。