在 P/Invoke 个 C++ 函数后清理内存
Clean up memory after P/Invoke a C++ function
我的应用程序是一个 C# 程序,它在 P/Invoke 上使用 C++ 函数。
在调用 C++ 函数之前加载库:
IntPtr hLib = LoadLibrary("CPPFunctions.DLL");
在 C++ 函数返回后,它通过回调到我的 C# 应用程序得到清理库的结果:
FreeLibrary(hLib);
C++ 中使用的一个库正在存储内存,但从不释放它。这是因为库是一个模拟模型,它的过程通常在运行.
后终止。
这意味着如果重复调用该函数,我将需要越来越多的内存。
有没有办法完全释放C++分配的内存?
这不是你可以从外面做的事情。图书馆必须提供设施来实现这一点。要么库设计不当,不可避免地会泄漏,要么你没有调用它提供的清理函数。
不管怎样,没有神奇的pinvoke函数可以解决这个问题。通过研究图书馆及其文档可以找到前进的方向。您可能需要联系其开发人员。
我的应用程序是一个 C# 程序,它在 P/Invoke 上使用 C++ 函数。 在调用 C++ 函数之前加载库:
IntPtr hLib = LoadLibrary("CPPFunctions.DLL");
在 C++ 函数返回后,它通过回调到我的 C# 应用程序得到清理库的结果:
FreeLibrary(hLib);
C++ 中使用的一个库正在存储内存,但从不释放它。这是因为库是一个模拟模型,它的过程通常在运行.
后终止。这意味着如果重复调用该函数,我将需要越来越多的内存。
有没有办法完全释放C++分配的内存?
这不是你可以从外面做的事情。图书馆必须提供设施来实现这一点。要么库设计不当,不可避免地会泄漏,要么你没有调用它提供的清理函数。
不管怎样,没有神奇的pinvoke函数可以解决这个问题。通过研究图书馆及其文档可以找到前进的方向。您可能需要联系其开发人员。