在多个值

时间:2015-04-28 15:28:57

标签: arrays performance for-loop autoit next

我将csv的不同部分分配给一个数组,特别是每行2个,并且它们不是大值,而是只有小数点后6个值的纬度/长度。有时我可以有500行的列表,有时它可以有多达100,000行。当它超过大约4,000但是代码开始变得非常慢。我有一个显示进度的进度条,所以我可以看到它在分配值时呈指数级变慢。这是我的代码:

$aArray1 = FileReadToArray("\\miami\edx\requests\"&$FileName&"\Data\GIS\Meters.csv")

For $i = 2 to Ubound($aArray1)
	  $line = FileReadLine("\\miami\edx\requests\"&$FileName&"\Data\GIS\Meters.csv", $i)
          $row_array = StringSplit($line,",")

		 $lattitude[$i] = $row_array[Ubound($row_array)-3]
		 $longitude[$i] = $row_array[Ubound($row_array)-2]

	  GUICtrlSetData($progress1, ($i/ubound($aArray1))*100)
	  GUICtrlSetData($Label2,Round(($i/ubound($aArray1))*100,1)&"% Complete")
Next

有谁知道为什么会这么慢?也许我每次都在重复不必要的步骤,这会减慢它的速度。我无法弄清楚。提前致谢。

1 个答案:

答案 0 :(得分:0)

感谢巴拿马杰克,我想通了。我只使用了我制作的原始数组而不是读取每一行。我仍然不知道是什么减慢了它的速度,但是这就是修正它的原因:

$i = 2
$aArray1 = FileReadToArray("\\miami\edx\requests\"&$FileName&"\Data\GIS\Meters.csv")
Do
	  $row_array = StringSplit($aArray1[$i],",")

		 $lattitude[$i] = $row_array[Ubound($row_array)-3]
		 $longitude[$i] = $row_array[Ubound($row_array)-2]

	  GUICtrlSetData($progress1, ($i/ubound($aArray1))*100)
	  GUICtrlSetData($Label2,Round(($i/ubound($aArray1))*100,1)&"% Complete")
	  $i = $i + 1
Until $i = Ubound($aArray1)