Избегайте утечки памяти в клиенте c # неуправляемой DLL с утечкой памяти

1

К сожалению, я должен использовать в С# -клиенте собственную 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
memory-leaks
unmanaged

2 ответа

1
Лучший ответ

Согласно моей теории, это ничего не меняет. В С#/управлении ничего не изменится, если вы загрузите DLL в собственную программу. DLL будет выделять кучную память, и поскольку этот ресурс принадлежит процессу, он будет сохраняться, даже если DLL будет выгружена.

Все изменится, если у вас будет чисто управляемая DLL. Затем вы можете загрузить его в домен приложения и уничтожить DLL вместе с App-Domain...

Итак, решения? Трудный путь будет похож на 64-битный процесс с 32-разрядной DLL-проблемой. Создайте отдельный процесс, загрузите DLL и выполните удаленные вызовы. Это громоздко, но если это всего лишь звонки, это может стоить того.

Другое: Не знаю, что я знаю, но исправляю DLL-код.

0

Если вы используете какую-либо стороннюю dll в С#, нам нужно вручную удалить, когда она не используется

Ручным удалением ссылки на объект с помощью следующей команды. GC.SuppressFinalize()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню