Утечка в RuntimeBinder при использовании "динамического" ключевого слова с __ComObject

Кто-нибудь знает, есть ли способ предотвратить утечку памяти в RuntimeBinder при использовании "динамического" ключевого слова с экземплярами __ComObject в C#?

Я получил следующий код:

var t = Type.GetTypeFromCLSID(new Guid("BB06C0E4-D293-4f75-8A90-CB05B6477EEE"));
while (true)
{
    dynamic o = System.Activator.CreateInstance(t);
    Marshal.ReleaseComObject(o);
}

Это приводит к утечке экземпляров класса LocalVariableSymbol (и других из пространства имен Microsoft.CSharp.RuntimeBinder.Semantics).

Замена "динамического" на "объект", т.е.

    object o = System.Activator.CreateInstance(t);

устраняет утечку, но я бы предпочел продолжать использовать динамический (фактический код намного сложнее и использует "динамический").

Я знаю, что синглтон RuntimeBinder кэширует данные, и это вызывает утечку, но знаете ли вы, есть ли способ очистить кэш и т. Д.?

Большое спасибо!


Похожие вопросы:

Ссылки по теме:

2 ответа

Решение

Решением в моем случае было заменить:

dynamic o = System.Activator.CreateInstance(t);

с:

object o = System.Activator.CreateInstance(t);
dynamic d = o;

Утечка памяти больше не происходит с применением обходного пути.

У меня была похожая проблема: использование "динамического" вызвало утечку памяти.

Я решил это следующим образом:

using (dynamic attr = curve.Attributes)
{
  if (attr != null)
    return attr.InternalLabel;
}
Другие вопросы по тегам