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):

;释放内存

            ;获取当前内存中的所有文件的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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值