如何释放非托管代码的内存

问题描述

有个问题比较困惑,非托管c++中有如下代码;INF_APPboolGetTestDateTime(char**TestDateTime){charsource[100]="ceshishuzhu";char*pstr=newchar[100];memcpy_s(pstr,100,source,100);*TestDateTime=pstr;returntrue;}在C#中调用方式如下:[DllImport("InfParser.dll",EntryPoint="GetTestDateTime",CallingConvention=CallingConvention.Cdecl)]publicstaticexternboolGetTestDateTime(refIntPtrTestDateTime);Stringtesttime=string.Empty;IntPtrptr=newIntPtr();boolbRet=NativeMethod.GetTestDateTime(refptr);testtime=Marshal.PtrToStringAnsi(ptr);程序运行,没问题,可是c++函数中new的内存没有机会去释放,会有内存泄漏。请问这种情况如何释放那个临时分配的内存呢?

解决方案

解决方案二:
这么写,那c++里也必须有释放的函数啊
解决方案三:
你应该去问写这个c++代码的人,问问他到底有没有这个考虑。在.net中扯不上“释放非托管代码”的职责问题,完全是你引用的dll的开发者必须自己负责的事情。而且这个“释放”也绝非什么简单方便就能做到的,需要在c++代码中一点点“细抠”无遗漏地去单独编码。因此你在一个.net程序中,纠结这个是完全不应该的。
解决方案四:
谁申请谁释放用dispose模式,C++再定义一个方法,里面写delete,然后C#的dispose方法去调用

时间: 2024-09-14 15:07:45

如何释放非托管代码的内存的相关文章

实现释放CentOS系统内存的Shell脚本分享_linux shell

这几天发现CentOS系统内存一直涨,即使把apache和mysql关闭了,内存也不释放,可以使用以下脚本来释放内存:   脚本内容:   复制代码 代码如下:     #! /bin/bash       # cache释放:       # To free pagecache:       sync       sync       #echo 1 > /proc/sys/vm/drop_caches       # To free dentries and inodes:       #e

释放指针对象内存-QList中的指针成员无法释放内存,大家是怎么做的?

问题描述 QList中的指针成员无法释放内存,大家是怎么做的? QThread * thread = new QThread(); QList * list = new QList(); list->append(thread); 然后遍历QList中的线程,当某个线程运行完后释放内存 delete list->takeAt(i); 但发现程序运行很久后占用的内存在增大,是不是delete list->takeAt(i);没有释放掉内存 解决方案 加一句list->takeAt(i

Lua中释放table占用内存的方法_Lua

table的大小是动态变化的.看如下代码: 复制代码 代码如下: tb = {1,2,3} --数组大小4,hash表大小1(不管hash表有没有存数据,它的大小最小为1)    tb[5] = 5  tb[100] = 100 --数组大小4,hash表大小2  因为后插入的两个数的key过于离散,所以它们被保存到hash表中.最终tb的大小为4+2=6. 这时我们对table进行删除操作: 复制代码 代码如下: tb[1] = nil  tb[2] = nil  tb[3] = nil  t

手动释放Linux服务器内存(具体操作步骤)_unix linux

在服务器运行过程中,使用free -m查看服务器内存时,经常会发现free值很小,有些同学就会很紧张,总想采取一些措施,使得free值看起来高一点,心里就比较爽一点.其实,个人觉得这完全是图一时之快,没什么实质性用途. 一.大众释放内存方法1. 首先使用free -m查看剩余内存 复制代码 代码如下: linux-8v2i:~ # free -m             total       used       free     shared    buffers     cachedMem

谈谈如何手动释放Python的内存_python

在上篇博客中,提到了对一个脚本进行的多次优化.当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑. 在上文的优化中,对每500个用户,会进行一些计算并记录结果在磁盘文件中.原本以为这么做,这些结果就在磁盘文件中了,而不会再继续占用内存:但实际上,Python的大坑就是Python不会自动清理这些内存.这是由其本身实现决定的.具体原因网上多有文章介绍,这里就不copy了. 本篇博客将贴一个笔者的实验脚本,用以说明Python确实存在这么一个不释放内存的现象,另

关于c#动态调用非托管DLL的内存释放问题

问题描述 本人由于客户的需要,需要在程序的运行过程中,动态加载不同的DLL.这与直接调用非托管DLL不一样.下面这个帖子中的第三个方法很好的说明了如何动态调用非托管DLL.http://blog.csdn.net/pansiom/article/details/568096#comments为了方便使用,我把文中的方法弄成了一个DLDApi类,如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Re

关于php内存释放问题

今天抽了一上午时间,来看了看之前解决过内存问题的代码,相对来说,我对自己代码的优化程序非常不满意,一次性导入四万条数据就使代码变得如此繁琐,我想这不是根本的解决方法.通过网上检索,对问题有进一步的分析:      在php内存溢出的问题中,前两种方法就不提了(可以参考<关于php内存释放问题>在博园中),不难分析出,其实问题的关键在于如何在循环中同步释放内存,而不是循环几百条来释放一次,因为大家在调试中会发现,如果我们把循环中复用性较高的代码封装到函数中,然后使用调用子函数的形式,会是程序的执

关于php内存释放问题(二)

今天抽了一上午时间,来看了看之前解决过内存问题的代码,相对来说,我对自己代码的优化程序非常不满意,一次性导入四万条数据就使代码变得如此繁琐,我想这不是根本的解决方法.通过网上检索,对问题有进一步的分析: 在php内存溢出的问题中,前两种方法就不提了(可以参考<关于php内存释放问题>在博园中),不难分析出,其实问题的关键在于如何在循环中同步释放内存,而不是循环几百条来释放一次,因为大家在调试中会发现,如果我们把循环中复用性较高的代码封装到函数中,然后使用调用子函数的形式,会是程序的执行速度降低

sqlserver内存释放

  注:本人在用sqlserver2000测试 ,很多命令都不能用 由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右), Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下. 这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句, 那么Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来, 下一次