最近在写的代码,当中涉及到提取数组中特定位置的数据,然后并保存。
大概逻辑就是先从二维数组中提取某一行信息,再根据之前利用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):
;释放内存
;获取当前内存中的所有文件的fid
fids = envi_get_file_ids()
;获取数组的大小
size = size(fids)
length = size[1]
;循环释放内存中的文件
;主要就是envi_file_mng这个函数,其中id是打开文件的id,另外还有两个关键字
;remove是只从内存中移除,delete不仅从内存中移除也从硬盘上删除,大家要 ;慎用
for i = 0L, length-1 do begin
envi_file_mng,id = fids[i],/remove
endfor
面向对象(适用于ENVI5.X版本):
;释放内存
;获取当前内存中的所有文件的对象
opendata = e.GetOpenData()
;获取数组的大小
length= size(opendata,/DIMENSIONS)
;循环释放内存中的文件
;之前得到的对象是ENVIRaster,所以可以调用其中的close方法,释放掉内存
for i = 0L,lengthl[0] -1 do begin
opendata[i].close
endfor
放在每次循环的最后就可以