В следующем коде есть memoryleak.Memoryleak при использовании AppDomain.CurrentDomain.AssemblyResolve
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
AssemblyResolveMemoryTest assemblyResolveMemoryTest = new AssemblyResolveMemoryTest();
}
}
}
class AssemblyResolveMemoryTest
{
private byte[] _allocateMemory;
public AssemblyResolveMemoryTest()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
//memory is not released anymore
_allocateMemory = new byte[300000000];
}
System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
return null;
}
}
Похоже, событие AssemblyResolve вызывает утечку памяти.
В чем причина этого? Нужно ли явно удалить обработчик событий в этом случае? Если да, то где именно место для удаления этого обработчика событий? Внедрить IDisposable или использовать Try/finally?
Вам нужно будет подумать, что триста мегабайт. –
Это просто для показа эффекта. Утечка памяти останется, даже если я добавлю только один байт в массив. – Manuel