Joh*_*son 1 vba memory-management
他们曾经说这是关于内存管理的.但是,看看我发现未能对变量进行维度化的事情将默认为一个变量数据类型,它分配22个字节的内存.
我们只考虑一兆字节的内存.1,000,000字节.这意味着我需要45,454个变量来咀嚼单个MB的内存.大多数现代系统都有几GB的内存.所以问题是我真的应该关心为我的所有变量仔细设置正确的调光吗?或者按现代标准浪费时间?
内存使用只是令人愉快的副作用.我建议使用的真正原因Option Explicit是它允许编译器保护您免受编译和运行的编码错误,但不能按照您的意图执行操作.
示例1:它使拼写错误变成意外灾难.
Dim variableNamedFoobar As String
variableNamedFoobar = "Something"
If varableNamedFoobar <> "Something" Then
Debug.Print "Did you catch that? The compiler would..."
End If
Run Code Online (Sandbox Code Playgroud)
如果您没有明确声明变量,编译器会愉快地为您提供一个22字节的空字符串来进行比较.
示例2:它还可以防止泄漏范围.考虑一个具有多个可变范围级别的庞大项目.希望你记住你的全局变量:
Private x As Integer
Private Sub First()
'I remembered here that x is a global.
x = 2
Debug.Print x
Second
Debug.Print x
End Sub
Private Sub Second()
'I forgot here.
For x = 1 To 5
Next x
End Sub
Run Code Online (Sandbox Code Playgroud)
添加Dim x as Integer用作循环计数器可确保其作用域为Second().
示例3:它允许编译器检测类型不匹配.
Set foo = New Collection
foo.Add "Bar"
Debug.Print TypeName(foo)
'... 100 lines of code later...
foo = 6
Debug.Print TypeName(foo)
Run Code Online (Sandbox Code Playgroud)
如果你Dim foo As Collection在某处,你会得到一个编译时错误,让你知道你已经有了一个foo,你不应该为它分配6.
还有很多其他的例子,你可以通过隐式变量声明在脚(或更高)中射击自己.虽然这些示例很容易在上面的代码块的隔离中发现,但是它们中的任何一个都会导致在大型代码库中调试错误并且非常困难.做自己(以及可能需要稍后维护代码的每个人)帮忙并输入额外的代码行.