3

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

我有一个扫描程序集/类型的应用程序,寻找与给定规范匹配的方法。问题是内存消耗显着增加(尤其是在引用大量程序集的情况下),因为 .NET 挂在方法元数据上。

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

4

2 回答 2

3

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

于 2010-06-17T20:31:49.467 回答
0

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

于 2010-06-18T00:27:11.647 回答