IDL 内存释放

最近在写的代码,当中涉及到提取数组中特定位置的数据,然后并保存。

大概逻辑就是先从二维数组中提取某一行信息,再根据之前利用where得到的index,对这个行数组提取一些列的信息。

我采用了如下两种方法

temp1=var_Data[*,x]
temp=temp1[index]
temp=(var_Data[*,x])[index]

之后报了内存不够,我发现程序随着循环一直在消耗内存,并且运行速度越来越慢,于是我添加了如下一行

delvar,temp

以上的两种方法不管用

后来换成以下代码,就可以正常消除内存占用了,运行速度也变快了。

temp=var_Data[index,x]
delvar,temp1

最近还发现一个博客

ENVI/IDL混合编程批处理中内存的释放_B博士的博客-CSDN博客_批处理释放内存

面向过程(适用于ENVI4.X以及ENVI5.X Classic):

;释放内存;获取当前内存中的所有文件的fidfids = envi_get_file_ids();获取数组的大小size = size(fids)length = size[1];循环释放内存中的文件;主要就是envi_file_mng这个函数,其中id是打开文件的id,另外还有两个关键字;remove是只从内存中移除,​delete不仅从内存中移除也从硬盘上删除,大家要              ;慎用for i = 0L, length-1 do beginenvi_file_mng,id = fids[i],/removeendfor

​​面向对象(适用于ENVI5.X版本):

;释放内存;获取当前内存中的所有文件的对象opendata = e.GetOpenData();获取数组的大小length= size(opendata,/DIMENSIONS)​;循环释放内存中的文件;之前得到的对象是ENVIRaster,所以可以调用其中的close方法,释放掉内存​for i = 0L,lengthl[0] -1 do beginopendata[i].closeendfor

放在每次循环的最后就可以


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部