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.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秒。
您的代碼不完整或無意義。你讀取一個數組的值1445085萬次,但是你丟棄了144508,499次的結果。
如果你只關心最後的結果,我會優化,對你:
Dim X As Integer
d = Ary(17000, X)
告訴我們你真正想做的事,和我們提供了一個更好的答案。
有一些普通的事情可以做:
不要使用變/日期陣列 - 變種使用更多的內存,如果他們從讀取Excel,還有在維護日期格式一些開銷的區域。用Date數組會更好,我懷疑,用雙精度數組更好。
假設您打算進行某種日期比較,您需要多次重讀多行。看看使用Dictionary對象,你可能會顯着減少讀取次數。
代碼是循環的相關部分。還有其他處理使用d。這個問題只關於從陣列中獲取d的性能。 該數組是2維的類型變體,並填充日期和值(實數)。我將如何去使用類型日期爲0列和雙列爲1到6?有可能有一個多類型的數組? 我沒有提到Excel。這是嚴格的VBA。 避免捆綁物體。 – NOYB
做*什麼* 145百萬次需要時間,即使是一臺電腦。讓速度更快的唯一方法是找到一種不多次閱讀的方法。 – Kaz
將*相同*值讀取至17,000次表明您沒有使用正確的數據結構。 – ThunderFrame
@NOYB提出問題的方式,這是[X-Y問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。請提供更多關於你想要實現的細節。 – ThunderFrame