我有一個主子,使得使用一個Client
類:與100 000
Clients
創建一個數組並循環陣列之上100
次,每次設置不同的隨機數到每個Client
。Excel VBA中:設置一個長變量爲每個對象類顯着地增加執行時間
Sub start()
Application.ScreenUpdating = False
Dim j As Long
Dim clientsColl() As Client
ReDim clientsColl(1 To 100000) As Client
For j = 1 To 100000
Set clientsColl(j) = New Client
clientsColl(j).setClientName = "Client_" & j
Next
Dim clientCopy As Variant
MsgBox ("simulations start")
Dim i As Long
For i = 1 To 100
For Each clientCopy In clientsColl
clientCopy.setSimulationCount = 100
clientCopy.generateRandom
Next
Next
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox ("done")
End Sub
但是,此代碼需要不同的時間來運行,這取決於線clientCopy.setSimulationCount = 100
是否被註釋或沒有。如果該行被註釋掉simulations start
MsgBox
需要16 seconds
才能運行。但是,如果該行未被註釋掉並且被執行,則第二個循環將運行2 minute 35 seconds
。
這裏的Client
類的內部,使用Let
屬性:
Private simulationCount As Long
Public Property Let setSimulationCount(value As Double)
simulationCount = value
End Property
Private randomNumber As Double
Public Sub generateRandom()
randomNumber = Rnd()
End Sub
因此它只是把數100
每個客戶端裏面。爲什麼它會將執行時間增加九倍?
如果你的代碼作品應該被移動到另一個論壇得到改善。 – 2017-12-27 13:58:26
任何代碼都可以通過經常重複來降低速度。這不是快速的代碼。考慮將參數類型從Double更改爲Long,這樣您就不需要支付兩個昂貴的浮點轉換。避免變種,使用客戶端。 –
Hmm,Dim obj由於客戶端=客戶端循環內循環應始終工作。使用For..To而不是For Each應始終有效。 –