К сожалению, я должен использовать в С# -клиенте собственную C++ DLL с утечками памяти.
Я должен был знать, есть ли хороший способ избежать утечки памяти в моем приложении С#?
На самом деле, я пытаюсь загрузить/разгрузить много раз мою DLL, чтобы избежать использования памяти, но я не уверен, что она работает, чтобы избежать утечки памяти:
// Dynamically load DLL file
NativeMethods.LoadLibrary(...)
// Do stuffs with the DLL
... (call compute method)
// Dynamically unload DLL file
NativeMethods.FreeLibrary(...)
// Dynamically load DLL file
NativeMethods.LoadLibrary(...)
// Do stuffs with the DLL
... (call compute method)
// Dynamically unload DLL file
NativeMethods.FreeLibrary(...)
etc...
благодаря
Согласно моей теории, это ничего не меняет. В С#/управлении ничего не изменится, если вы загрузите DLL в собственную программу. DLL будет выделять кучную память, и поскольку этот ресурс принадлежит процессу, он будет сохраняться, даже если DLL будет выгружена.
Все изменится, если у вас будет чисто управляемая DLL. Затем вы можете загрузить его в домен приложения и уничтожить DLL вместе с App-Domain...
Итак, решения? Трудный путь будет похож на 64-битный процесс с 32-разрядной DLL-проблемой. Создайте отдельный процесс, загрузите DLL и выполните удаленные вызовы. Это громоздко, но если это всего лишь звонки, это может стоить того.
Другое: Не знаю, что я знаю, но исправляю DLL-код.
Если вы используете какую-либо стороннюю dll в С#, нам нужно вручную удалить, когда она не используется
Ручным удалением ссылки на объект с помощью следующей команды. GC.SuppressFinalize()