1、 IDL提供一系列的内置函数和程序来执行常用的操作,这些系统内置的函数都是经过优化的,要比采用IDL编写的通过循环和下标操作来进行的同样功能的程序要快速。举例来说,对数组进行运算的时候,尽量不用使用循环而使用IDL内置的一些数组操作函数来实现。
2、 表达式的次序对执行的速度也有很大的影响:
考虑以下表达式:
B=A*16. /Max(A)
该表达式对A数组的每一元素乘上16,再对A数组的每一个元素再除以A数组的最大值。整个操作使用了两次A的数组元素。
更加快速的实现方法如下:
B=16./Max(A) *A
这种情况下只对A进行了一次运算就完成了整个操作。
3、 避免在循环内使用IF表达式,而使用逻辑数组运算
例如:
FOR I=0L, N_ELEMENTS(data)-1L DO $
IF (data[i] LE 30) THEN $
Data[i]=30
快速的实现方法为:
Dex=WHERE(data LE 30 ,n)
IF(n GT 0) THEN data[dex]=30
更快的实现方法为:
Data=(data GT 30) *data+(data LE 30)*30
最快的实现方法为:
Data=data >30
4、 在循环中移除不变的表达式
5、 在使用BYTARR, COMPLEXARR, DCOMPLEXARR, FLTARR, INTARR, LONARR, MAKE_ARRAY, OBJARR , 以及PTRARR创建数组是加上NOZERO关键字,防止数组默认填零,可使速度加快 。
6、 在处理大的数组时,使用TEMPORARY函数来最小化内存需求。
A=TEMPORARY(A)+1
7、 函数的调用有很大的开销,尽量避免使用只有一行的函数。
8、 在不使用指针和对象后,及时清除它们。