Does anybody know if there is a way of preventing a memory leak in RuntimeBinder when using "dynamic" keyword with __ComObject instances in C#?
I got the following code:
var t = Type.GetTypeFromCLSID(new Guid("BB06C0E4-D293-4f75-8A90-CB05B6477EEE"));
while (true)
{
dynamic o = System.Activator.CreateInstance(t);
Marshal.ReleaseComObject(o);
}
This leaks LocalVariableSymbol class instances (and other from the Microsoft.CSharp.RuntimeBinder.Semantics namespace).
Replacing "dynamic" with "object" i.e.:
object o = System.Activator.CreateInstance(t);
fixes the leak but I'd prefer to keep using dynamic (the actual code is much more complex and makes use of "dynamic").
I know the RuntimeBinder singleton caches the data and this causes the leak but do you know if there's any way to cleanup the cache etc.?
Many thanks!
Similar questions:
Related links:
The solution in my case was to replace:
dynamic o = System.Activator.CreateInstance(t);
with:
object o = System.Activator.CreateInstance(t);
dynamic d = o;
The memory leak no longer occurs having the workaround applied.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With