社区
C#
帖子详情
C#调用C语言编写的dll,如何释放内存?
peter56688
2009-11-23 03:30:54
我用C#调用了一个C语言编写的dll,在这个dll中分配了很多内存,但是也都是在dll中释放的。因为程序很大,最多时占用了500M多内存,但是最后程序运行完用FreeLibrary释放这个dll后,还是占用这么多内存,一点没有释放,请问这正常吗?还是有什么别的方法,加载的时候是使用的LoadLibrary。
dll单独调试过,没有内存泄露
...全文
420
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语言
DLL
是通过`
Dll
Import`特性实现的,这允许
C#
应用程序利用
C语言
的高效计算能力或其他特定功能。此过程涉及
C语言
DLL
的生成、
C#
的接口声明和异常处理,确保跨语言交互的正确性和稳定性。在实际开发...
C#
调用
C语言
DLL
文件示范
###
C#
调用
C语言
DLL
文件示范 #### 知识点概述 在软件开发领域,经常会出现不同编程语言之间的交互需求。例如,在.NET框架中使用
C#
开发的应用程序可能需要
调用
C语言
编写
的动态链接库(
DLL
)来实现特定功能。本篇...
C#
调用
QT的
dll
方法
C#
调用
QT的
dll
方法 在这篇文章中,我们将讨论如何在
C#
中
调用
QT的
dll
方法。首先,我们需要在QT平台上建立一个
dll
工程,设置头文件和源文件,然后生成
dll
文件。最后,我们可以在
C#
中使用
Dll
Import特性来
调用
dll
方法。...
C语言
通过动态加载
DLL
实现
调用
JLink功能.zip
本示例聚焦于
C语言
如何通过动态加载
DLL
来
调用
JLink功能,JLink是一款广受欢迎的调试器,常用于嵌入式系统的开发,特别是针对ARM架构的设备。 首先,了解
C语言
中的`LoadLibrary`和`GetProcAddress`函数。这两个函数...
windows中使用
C#
调用
C语言
生成的
dll
完成以上步骤后,运行
C#
程序,它将
调用
C语言
编写
的`swap`函数,实现两个整数的交换。注意,
C#
项目并不需要在“引用”中添加
DLL
,只需确保
DLL
文件与可执行文件在同一目录即可。 总结,通过上述步骤,我们学会了如何...
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章