社区
C#
帖子详情
C#调用C语言编写的dll,如何释放内存?
peter56688
2009-11-23 03:30:54
我用C#调用了一个C语言编写的dll,在这个dll中分配了很多内存,但是也都是在dll中释放的。因为程序很大,最多时占用了500M多内存,但是最后程序运行完用FreeLibrary释放这个dll后,还是占用这么多内存,一点没有释放,请问这正常吗?还是有什么别的方法,加载的时候是使用的LoadLibrary。
dll单独调试过,没有内存泄露
...全文
490
8
打赏
收藏
C#调用C语言编写的dll,如何释放内存?
我用C#调用了一个C语言编写的dll,在这个dll中分配了很多内存,但是也都是在dll中释放的。因为程序很大,最多时占用了500M多内存,但是最后程序运行完用FreeLibrary释放这个dll后,还是占用这么多内存,一点没有释放,请问这正常吗?还是有什么别的方法,加载的时候是使用的LoadLibrary。 dll单独调试过,没有内存泄露
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
文件
环境: VS2010, Win7 1. 添加新项目->Win32项目 输入名称:CSInvokeC
Dll
2.应用程序设置中选择
DLL
然后点击完成 3 在CSInvo在CSInvokeC
Dll
keC
Dll
.CPP中书写C代码 #include "stdafx.h" #include "malloc.h" #include "userinfo.h" typedef struct {
怎么用
c语言
编写
dll
动态库,WPF
调用
dll
- 用
C语言
编写
动态库
概述用
C语言
编写
一套接口供
C#
调动,实现:malloc一块
内存
内存
,通过参数初始化
内存
,并返回c
dll
_t句柄打印c
dll
_t
内存
中数据freec
dll
_t
内存
接口函数这里我们用到了struct来管理开辟的
内存
关于性别的枚举:typedef struct{bool sports; /* whether be qualified or not */uin...
C#
下
调用
C写的
dll
的例子
初学
c#
,不明白怎么用指针
调用
C下的函数,经过一番学习,记录如下://===================
dll
_test.def====LIBRARY "test_
dll
"EXPORTSaddtest @ 1addstring @ 2 ///
dll
主文件================================#include #include #include #
C#
调用
C语言
dll
C#
调用
C语言
dll
在拥有C/C++学习基础上学习
C#
在winform平台上,有时需要与另外的
C语言
对接传输数据,在
C语言
已封装成
dll
情况下,在VS2019上如何
调用
dll
实现
调用
C语言
定义的函数。 使用
DLL
Import // An highlighted block [
Dll
Import("AAA.
dll
", EntryPoint = "BBB", CallingConvention = CallingConvention.Cdecl)] public unsafe st
C#
调用
dll
文件
一、先使用C++来创建一个 .
dll
文件 1、创建新项目:Create
Dll
01 2、选择 “动态链接库(.
dll
)” 文件 3、在Create
Dll
01.cpp 源文件中添加如下代码 // Create
Dll
01.cpp : 定义
DLL
应用程序的导出函数。 // #include "stdafx.h" extern "C" __declspec(
dll
ex...
C#
111,129
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章