C# 调用C++写的一个DLL 出现内存泄露的问题

Hs_Boy 2007-03-31 08:34:13
我用C++写了一个DLL,里面有一个函数,这个函数的功能就是读取C盘下的一个文件里的内容.C#去调用C++里的这个函数,出现了内存不释放的问题,如果把这个调用过程循环500次,内存就上到了100M,而这个文件本身才10K,这个是怎么回事情呢.有高手可以解释一下么,GC我已经用过了.我说C++的函数是读写文件是举例,千万不要有人告诉我不要用C++,直接用C#写.下面是我用到一些代码:
C++代码

extern "C"
{


__declspec(dllexport) int ReadFile()
{
if(ReadFile())
{
return 1;
}
else
return 0;


}

C# 代码
[DllImport("Read.dll",CharSet=CharSet.Ansi)]
public static extern int ReadFile();




...全文
645 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
barrytam 2007-04-01
  • 打赏
  • 举报
回复
内存泄漏应该是你C++代码问题,建议检查C++代码.
sdl2005lyx 2007-04-01
  • 打赏
  • 举报
回复
lz:要从两个角度分析这个问题:
1、int ReadFile():
如果你的内存是在函数体里面分配的,而仅仅只是返回读到内容的重度,那么你肯定需要在函数体末尾释放分配的内存,这个在C++里比较容易。
2、修改接口:
如:int ReadFile(byte[] buff);由调用层对内存分配进行控制、处理。调用层如用C#,对内存空间,使用类的“全局变量”分配,即内存只分配一次,重复使用。如果临时分配,由于在C#很难控制内存,重复使用,内存会很快增加!
MaybeHelios 2007-04-01
  • 打赏
  • 举报
回复
是的
工作应该在
C++库里面做
不要把问题传递给
外部C#调用
hertcloud 2007-04-01
  • 打赏
  • 举报
回复
这个 和 虚拟机 有什么关系
就算是 引用c++的库
对于c++代码部分的 资源 释放 是应该c++代码内部完成的
ylqmf 2007-04-01
  • 打赏
  • 举报
回复
up
zhangqiushui 2007-03-31
  • 打赏
  • 举报
回复
c++中ReadFile函数可能分配了内存没释放,所以造成问题了。
你也可以在c#的代码中(虚构时)调用ExitProcess(api)强制释放内存
wshcdr 2007-03-31
  • 打赏
  • 举报
回复
C++中的内存分配中,要注意自己分配,自己回收
lovelyxinxin_1983 2007-03-31
  • 打赏
  • 举报
回复
是啊,在C++中释放内存啊
ufoteam 2007-03-31
  • 打赏
  • 举报
回复
贴出你得ReadFile()
ssdx 2007-03-31
  • 打赏
  • 举报
回复
释放不释放 应该由你的C++写的函数来完成吧
Hs_Boy 2007-03-31
  • 打赏
  • 举报
回复
难道没有人遇到过这个问题么??

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧