人们普遍认为,使用类似的结构Dim dict As New Dictionary
比表现更差Dim dict As Dictionary / Set dict = New Dictionary
.
解释是前一个例子 - 自动实例化 - 推迟实例化直到第一次使用变量dict
.因此,每次引用dict时,编译的代码必须首先检查是否dict
等于Nothing.
但是我发现编译代码无论如何都会这样做.每当您尝试使用对象引用时,您将收到错误Nothing
.
所以,为了向科学致敬,我进行了一些测试.结果表明两种方法之间没有性能差异.(在Excel 2007上运行)
拨打"创建字典并添加2项"100,000次.
反转测试呼叫的顺序:
调用"创建字典并添加6项"100,000次.
创建字典并添加100,000个项目.
创建字典并添加1,000,000个项目.
我没有看到任何迹象表明自动实例化与显式实例化的表现不佳.(要明确的是,出于其他原因,我会避免自动实例化,但我只是对这里的性能角度感兴趣.)
这是一个神话吗?
UPDATE
让我列出为什么表演论点对我没有意义.有人说
x.Add("Key", "Item")
Run Code Online (Sandbox Code Playgroud)
在自动实例化的对象中等效于以下内容:
If x is Nothing then
Set x = New Dictionary
End If
x.Add("Key", "Item")
Run Code Online (Sandbox Code Playgroud)
如果你这几千次打电话,这会让它看起来像"令人恐惧的开销".但是在显式实例化情况下,它正是代码编译版本中生成的逻辑形式:
If …
Run Code Online (Sandbox Code Playgroud)