社区
C#
帖子详情
C#调用C语言编写的dll,如何释放内存?
peter56688
2009-11-23 03:30:54
我用C#调用了一个C语言编写的dll,在这个dll中分配了很多内存,但是也都是在dll中释放的。因为程序很大,最多时占用了500M多内存,但是最后程序运行完用FreeLibrary释放这个dll后,还是占用这么多内存,一点没有释放,请问这正常吗?还是有什么别的方法,加载的时候是使用的LoadLibrary。
dll单独调试过,没有内存泄露
...全文
421
8
打赏
收藏
C#调用C语言编写的dll,如何释放内存?
我用C#调用了一个C语言编写的dll,在这个dll中分配了很多内存,但是也都是在dll中释放的。因为程序很大,最多时占用了500M多内存,但是最后程序运行完用FreeLibrary释放这个dll后,还是占用这么多内存,一点没有释放,请问这正常吗?还是有什么别的方法,加载的时候是使用的LoadLibrary。 dll单独调试过,没有内存泄露
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wsxqaz
2009-11-23
打赏
举报
回复
我估计他调用组建后因为什么地方还有引用所以就没有释放掉,就像我们以前调用office的组建,在进程里都有这个组建的进程,释放以后都还在,要去掉他,几个前提条件
1.必须所有引用都被删除(null掉)
2.调用GC.Collect显示回收(因为.net特性导致了你就算显示调用Collect他也不一定会去回收只有在不够的时候它才会去执行)
我建议你将所有的过程放在一个独立的方法里(不要用任何全局私有变量),然后调用这个方法,再执行外这个方法后在
方法外
调用GC.Collect()看看有没有用
ztenv
2009-11-23
打赏
举报
回复
[Quote=引用 5 楼 peter56688 的回复:]
引用 3 楼 gomoku 的回复:
FreeLibrary并不能释放你在调用该dll时进行分配而没有释放的内存。
解决方法要从明确职责开始,dll的接口要有明确的规定谁负责分配和释放内存。
另:要注意“占用了500M多内存”有多种解读。比如释放内存不一定马上影响Working set的数值。
问题是只要我一关闭exe,任务管理器里显示内存使用量显示那500多马上就被释放了
[/Quote]
内存是和进程相关的,只要你的进程结束了,你的进程所占用的内存(正在使用的或未使用的)都会被系统回收,看看C的dll吧,估计是内部的问题或你自己使用的问题;
wsxqaz
2009-11-23
打赏
举报
回复
确保所有的引用都已经删除(包括private 和 public的)
然后调用GC.Collect()
peter56688
2009-11-23
打赏
举报
回复
[Quote=引用 3 楼 gomoku 的回复:]
FreeLibrary并不能释放你在调用该dll时进行分配而没有释放的内存。
解决方法要从明确职责开始,dll的接口要有明确的规定谁负责分配和释放内存。
另:要注意“占用了500M多内存”有多种解读。比如释放内存不一定马上影响Working set的数值。
[/Quote]
问题是只要我一关闭exe,任务管理器里显示内存使用量显示那500多马上就被释放了
peter56688
2009-11-23
打赏
举报
回复
[Quote=引用 2 楼 huing 的回复:]
dll有没有提供free之类的api
[/Quote]
有啊,是这样的,dll中使用的内存都是在dll中malloc分配的,使用完后也都是在dll中free的,并没有dll和exe之间互相使用内存的情况,但是最后卸载dll后所占用的内存都没有释放
gomoku
2009-11-23
打赏
举报
回复
FreeLibrary并不能释放你在调用该dll时进行分配而没有释放的内存。
解决方法要从明确职责开始,dll的接口要有明确的规定谁负责分配和释放内存。
另:要注意“占用了500M多内存”有多种解读。比如释放内存不一定马上影响Working set的数值。
huing
2009-11-23
打赏
举报
回复
dll有没有提供free之类的api
wsxqaz
2009-11-23
打赏
举报
回复
free
c#
调用
c语言
Dll
程序实现了
C语言
生成动态链接库,以及
C#
的
调用
方法
C#
调用
C语言
DLL
文件示范
C#
调用
C语言
DLL
文件示范
C#
调用
C语言
DLL
文件示范
C#
调用
C语言
DLL
文件示范
C#
调用
QT的
dll
方法
C#
调用
QT的
dll
方法,个人资料方法,仅供参考,如有哪位大虾有更好的方法,请留言
C语言
通过动态加载
DLL
实现
调用
JLink功能.zip
C语言
通过动态加载
DLL
实现
调用
JLink功能
windows中使用
C#
调用
C语言
生成的
dll
本文给大家介绍的是在Windows系统中使用
C#
调用
C语言
生成的
DLL
文件的一种思路,非常的简单实用,有需要的小伙伴可以参考下
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章