2015-04-28 48 views
-1

我將一個csv的不同部分分配給一個數組,特別是每行有2個,並且它們不是很大的值,而是它們只是經過小數。有時我可以有500行的列表,有時可以有多達100,000行。當它達到約4,000以上時,代碼開始變得非常緩慢。我有一個顯示進度的進度條,所以我可以看到它正在以指數級的速度慢慢分配值。這裏是我的代碼:爲多個值賦值給數組獲取緩慢

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

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

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

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

沒有人有任何想法,爲什麼這可能是獲得這麼慢?也許我每次都在重複不必要的步驟,這會減慢速度。我無法弄清楚。提前致謝。

+2

你爲什麼要讀整個文件到一個數組,然後通過再次讀取文件中的行線。這看起來會讓它變慢。爲什麼不使用你在頂部創建的相同數組來做你所需要的? –

+0

@巴拿馬傑克我在開始閱讀它以獲得上限。這用於進度條。我不明白爲什麼這會真的放慢速度,因爲它是變慢的for循環。 –

回答

0

感謝巴拿馬傑克,我想通了。我只是使用原來的數組而不是讀取每一行。我仍然不知道發生了什麼減緩下來這麼多,但這裏是固定的:

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

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

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

+0

幹得好,我剛剛舉了一個重複使用同一陣列的例子。而且速度慢的原因是因爲你在每次迭代中都一行一行地閱讀它。從autoit幫助文件。 '從性能的角度來看,逐行讀取指定值爲遞增1的「行」參數是一個好主意。這迫使AutoIt重新讀取文件,直到它到達指定的行。「# –

+0

@PanamaJack Ohhhh。疑難雜症。沒有意識到它必須重新閱讀每一行才能到達下一行。謝謝。 –