2017-06-11 55 views
-4

1.45億陣列讀取需要6秒鐘。它如何做得更快?改進VBA陣列讀取性能

Dim X As Integer 

X = 0 
For Y = 1 To 17000 
    For Yn = Y To 17000 
     d = Ary(Yn, X) 
    Next 
Next 

Ary(Yn,X)是variant/date。
Ary大小是〜17000 x 7

沒有數組讀取的循環是1.5秒。數組讀取增加6.5秒。

+1

做*什麼* 145百萬次需要時間,即使是一臺電腦。讓速度更快的唯一方法是找到一種不多次閱讀的方法。 – Kaz

+2

將*相同*值讀取至17,000次表明您沒有使用正確的數據結構。 – ThunderFrame

+2

@NOYB提出問題的方式,這是[X-Y問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。請提供更多關於你想要實現的細節。 – ThunderFrame

回答

4

您的代碼不完整或無意義。你讀取一個數組的值1445085萬次,但是你丟棄了144508,499次的結果。

如果你只關心最後的結果,我會優化,對你:

Dim X As Integer 
d = Ary(17000, X) 

告訴我們你真正想做的事,和我們提供了一個更好的答案。

有一些普通的事情可以做:

不要使用變/日期陣列 - 變種使用更多的內存,如果他們從讀取Excel,還有在維護日期格式一些開銷的區域。用Date數組會更好,我懷疑,用雙精度數組更好。

假設您打算進行某種日期比較,您需要多次重讀多行。看看使用Dictionary對象,你可能會顯着減少讀取次數。

+0

代碼是循環的相關部分。還有其他處理使用d。這個問題只關於從陣列中獲取d的性能。 該數組是2維的類型變體,並填充日期和值(實數)。我將如何去使用類型日期爲0列和雙列爲1到6?有可能有一個多類型的數組? 我沒有提到Excel。這是嚴格的VBA。 避免捆綁物體。 – NOYB