c#调用c++DLL,关于非托管DLL资源怎么在使用完后释放
c#调用c++DLL,关于非托管DLL资源如何在使用完后释放
在一个大型长时间运行的c#编写的程序中,大量的调用c++的DLL,如果没有及时的释放,则系统早晚会崩溃,想请教一下大家有没有好的解决方法。
------解决思路----------------------
C++那里提供释放的函数
C#用Dispose方法封装
参考Windows API的设计
你看有ReadFile就有CloseFile,有OpenConnection就有CloseConnection,有LoadLibrary就有FreeLibrary。你的dll本身要支持释放才行。
------解决思路----------------------
dll里给个导出函数,可以释放内存,例如
------解决思路----------------------
同1楼
补充一点
你调用dll的地方封装到类里,类的实例不用了的时候,类自己调用释放的方法
而不是不同的地方都去调用dll,然后你就没法确定该如何释放了
------解决思路----------------------
释放任何需要释放的——内存、连接、文件句柄、关闭端口等等
------解决思路----------------------
资源谁申请,谁释放。通常,c++的dll会给你释放它申请并返回的资源的方法,如果非托管资源是你在C#里申请的,那一样的途径释放掉就好。
在一个大型长时间运行的c#编写的程序中,大量的调用c++的DLL,如果没有及时的释放,则系统早晚会崩溃,想请教一下大家有没有好的解决方法。
------解决思路----------------------
C++那里提供释放的函数
C#用Dispose方法封装
参考Windows API的设计
你看有ReadFile就有CloseFile,有OpenConnection就有CloseConnection,有LoadLibrary就有FreeLibrary。你的dll本身要支持释放才行。
------解决思路----------------------
dll里给个导出函数,可以释放内存,例如
void Release(void* p)
{
free(p);
}
------解决思路----------------------
同1楼
补充一点
你调用dll的地方封装到类里,类的实例不用了的时候,类自己调用释放的方法
而不是不同的地方都去调用dll,然后你就没法确定该如何释放了
------解决思路----------------------
释放任何需要释放的——内存、连接、文件句柄、关闭端口等等
------解决思路----------------------
资源谁申请,谁释放。通常,c++的dll会给你释放它申请并返回的资源的方法,如果非托管资源是你在C#里申请的,那一样的途径释放掉就好。