加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

IDL 内存释放

(2017-01-15 10:01:51)
分类: IDL
   1)主pro中可以用delvar直接删除变量,释放内存;

   2)数组运算后如原数组无其他用处,可用temporary()函数;

           IDL> help,data
           DATA INT = Array[400, 400]
           IDL> data1 = Temporary(data)*2
           IDL> help,data
           DATA UNDEFINED =
           IDL> help,data1
           DATA1 INT = Array[400, 400]

   3)IDL8.0下的新招

        (1)修改IDL启动配置文件内容 C:\Program Files\ITT\IDL\IDL80\bin\bin.x86\idlde.ini

          -vm
          C:\Program Files\ITT\IDL\IDL80\bin\bin.x86\jre\bin
          -vmargs
          -Xms128m
          -Xmx128m

          删除后面三行,即

          -vm
          C:\Program Files\ITT\IDL\IDL80\bin\bin.x86\jre\bin

        (2)使用系统变量!Null

         IDL> help,data1
         DATA1 INT = Array[400, 400]
         IDL> data1 = !null
         IDL> help,data1
         DATA1 UNDEFINED = !NULL
转自豆瓣【Cupid

对于大量的遥感数据而言,选择ENVI+IDL进行批处理,无疑是非常好的选择,无论是ENVI5.x之前版本的面向过程的处理,还是之后版本的面向对象的处理,基本上都能用IDL调用ENVI的函数,还是比较方便的。也就是说能用ENVI进行的处理,基本上都能用IDL进行批量处理。但是有个我觉得比较不好的地方就是处理完一个数据,ENVI都会把他读到内存中去,这样如果是处理成千上万的数据,就会造成一个问题,内存占用过大,导致程序,越来越慢,不仅如此还要担心程序会崩溃,所以,在这个过程中对内存的释放就显得尤为重要。

下面我就总结了对于ENVI/IDL来说,面向过程和面向对象编程中内存释放的方法

面向过程(适用于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

​前面两种释放文件的方法可以放在自己循环的最后面,当一个循环完成之后,就把内存释放掉,再进行下一次循环,这样就能快速的处理数据了。作者:xiegq​

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有