将值分配给数组在许多值之后会变慢



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

$aArray1 = FileReadToArray("\miamiedxrequests"&$FileName&"DataGISMeters.csv")
For $i = 2 to Ubound($aArray1)
	  $line = FileReadLine("\miamiedxrequests"&$FileName&"DataGISMeters.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

有谁知道为什么这会变得如此缓慢?也许我每次都在重复不必要的步骤,这会减慢速度。我想不通。提前谢谢。

多亏

了巴拿马杰克,我想通了。我只是使用我制作的原始数组,而不是读取每一行。我仍然不知道是什么让它减慢了这么多,但这是修复它的方法:

$i = 2
$aArray1 = FileReadToArray("\miamiedxrequests"&$FileName&"DataGISMeters.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)

这就是我会这样做的方式:

#include <file.au3>
$file = "C:Userstestmeters.csv"
Local $aArray
_FileReadToArray($file, $aArray, 1, ",")
_ArrayDisplay($aArray,"Debug")
$lattCol=6 ; adapt to your actual array, obviously
; $lattCol=$aArray[0][1]-3 ; counting from end 
$longCol=7
For $i = 1 To $aArray[0][0]
    ConsoleWrite($aArray[$i][$lattCol] & "   -   " & $aArray[$i][$longCol] & @CRLF)
    ConsoleWrite("prgress1: " & $i / $aArray[0][0] * 100 & @CRLF)
    ConsoleWrite("Label2: " & Round($i / $aArray[0][0] * 100,1) & "% complete" & @CRLF)
Next

主要变化:使用 _FileReadToArray 而不是 FileReadToArray - 它有更多的选项(例如定义分隔符),使我们能够只使用一个数组。(我没有打扰 GUI 元素 - 应该是微不足道的)

相关内容

  • 没有找到相关文章

最新更新