Можно ли очистить или отключить кэш .NET MethodInfo? - PullRequest
2 голосов
/ 18 июня 2010

Per MSDN , вызов Type.GetMethods() хранит отраженную информацию о методе в кэше MemberInfo, поэтому дорогая операция не должна выполняться снова.

У меня есть приложение, котороесканирует сборки / типы в поисках методов, соответствующих заданной спецификации.Проблема заключается в том, что потребление памяти значительно увеличивается (особенно при большом количестве ссылочных сборок), поскольку .NET зависает от метаданных метода.

Есть ли способ очистить или отключить этот MemberInfo кэш?

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Я так не думаю.Одним из трюков было бы сделать эту работу в AppDomain.Вы можете создать новый домен приложений, выполнить всю работу, сообщить о результатах, а затем выгрузить домен приложений.Не тривиальная задача и довольно медленная, но это единственный способ эффективно выгружать сборки или кэши, связанные с отражением (о которых я знаю).

0 голосов
/ 18 июня 2010

Вы можете несколько уменьшить потребление памяти, если вам не нужно выполнять методы, используя Assembly.ReflectionOnlyLoad (string) . Однако выгрузка сборок все равно потребует выгрузки AppDomain, поэтому, если ваша проблема является утечкой (ваша программа остается открытой, пользователь продолжает передавать вам новые сборки на неопределенный срок), вместо просто большого использования памяти, это не поможет.

...