- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 Client
类的主子程序:使用 100 000
Clients
创建一个数组,并在该数组上循环 100
次,每次为每个 Client
设置不同的随机数。
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 秒
才能运行。但是,如果该行未注释掉并执行,则第二个循环需要 2 分 35 秒
才能运行。
这是 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
放入每个客户端中。为什么它会使执行时间增加九倍?
最佳答案
您已将 clientCopy
定义为 Variant
,必须在每次方法调用的运行时解析它。请更改为 Client
类型并重新运行计时。
好的,我已经重新阅读了问题和评论,以加快循环速度,因此进行更改
Option Explicit
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
Dim clientCopy As Client
MsgBox ("simulations start")
Dim i As Long
For i = 1 To 100
Dim lClientLoop As Long
For lClientLoop = LBound(clientsColl) To UBound(clientsColl)
'For Each clientCopy In clientsColl
Set clientCopy = clientsColl(lClientLoop)
clientCopy.setSimulationCount = 100
clientCopy.generateRandom
Next
Next
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox ("done")
End Sub
关于vba - Excel vba : setting a long variable for each object class dramatically increases execution time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993190/
我在 Apache Spark 2.x 中有两个表。每个表都有一个公共(public)行“IDNUM”。称它们为表 A 和表 B。 这在 Apache SparkSQL 中很快: SELECT COU
我希望以前这里没有人问过这个问题(我确实在这里搜索过,并用谷歌搜索了答案,但找不到答案) 问题是:我正在使用 MS Access 2010 从链接表中选择记录(表中有数百万条记录)。如果我直接指定条件
当我启动 IntelliJ 调试器时,它会显示一个工具提示: Method breakpoints may dramatically slow down debugging 调试器需要很长时间才能启动
我有一个使用 Client 类的主子程序:使用 100 000 Clients 创建一个数组,并在该数组上循环 100 次,每次为每个 Client 设置不同的随机数。 Sub start()
我是一名优秀的程序员,十分优秀!