Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance VBA中变量声明的性能优势?_Performance_Ms Access_Vba - Fatal编程技术网

Performance VBA中变量声明的性能优势?

Performance VBA中变量声明的性能优势?,performance,ms-access,vba,Performance,Ms Access,Vba,在函数的开头标注变量与在使用变量之前声明变量相比,是否有性能优势 我在MS Access 2003中使用VBA 例如 Function f(y As Long) As Long Dim x As Long If y <> 0 Then x = 1000000 End If End Function 函数f(y等于长)等于长 暗x等长 如果y为0,那么 x=1000000 如果结束 端函数 诗句 Function f(

在函数的开头标注变量与在使用变量之前声明变量相比,是否有性能优势

我在MS Access 2003中使用VBA

例如

 Function f(y As Long) As Long
      Dim x As Long
      If y <> 0 Then
           x = 1000000
      End If
 End Function
函数f(y等于长)等于长
暗x等长
如果y为0,那么
x=1000000
如果结束
端函数
诗句

 Function f(y As Long) As Long
      If y <> 0 Then
           Dim x As Long
           x = 1000000
      End If
 End Function
函数f(y等于长)等于长
如果y为0,那么
暗x等长
x=1000000
如果结束
端函数

VBA绝对没有区别。声明变量只会影响设计时调试(IDE将知道要显示什么自动完成(intellisense))。在这种情况下,它根本不会影响性能。我也做过很多VBA宏,这是我注意到的一件事

作为演示,只要尝试在
Dim
语句上设置断点,您就会看到它不允许您这样做。这是因为此指令从未执行,仅用于指导实时调试引擎


希望对Wadih M的答案有所帮助,所有声明的变量都在编译过程之前进行初始化,无论它们在过程中的位置如何

要测试这一点,请尝试在不声明变量的情况下使用变量(您确实使用Option Explicit,对吗?):

选项显式 私有子对象(未声明) 暗x等长 调试。打印x 调试。打印y 端接头
这将返回一个“变量未定义错误”,断点是过程声明,即在执行任何代码之前,未声明的变量y突出显示。

代码本身的性能不符合Wadih的回答

但是在维护代码方面的性能,是肯定的。
我要说的是,大多数程序员希望在函数顶部定义变量。 像你提供的一个简单的例子,这并不重要。但是,代码中穿插着变量声明的复杂函数会让它感觉混乱。从而降低了读取和摸索代码的时间。从而增加了维护所需的时间


在循环中声明一个变量而不打算这样做也可能存在问题。因此,每次循环迭代都会重置变量


在维护代码时,代码本身的性能往往不如性能重要。

我认为你说的“VBA绝对没有区别”是错误的。例如,如果您运行此代码

Private Sub test2()
    zz = Timer
        For i = 1 To 100000000
            x = x + 1
        Next
    Debug.Print "No décalartion : " & Timer - zz
    yy = Timer
    Dim y As Long
        For i = 1 To 100000000
            y = y + 1
        Next
    Debug.Print "No décalartion : " & Timer - yy
End Sub
你会得到这个结果

无décalartion:3746094 décalartion:1855469

因此,变量声明提高了性能


关于

是的,我确实使用Option Explicit。感谢您的帮助。“在循环中声明变量而不打算这样做也可能会有问题。因此,变量在每次循环迭代中都会重置”--没有问题:变量不会在每次迭代中重置。“我想大多数程序员都希望变量在函数顶部定义”--可能是VBA程序员。大多数C#NET程序员应该期望变量在第一次使用/需要时被声明,我怀疑VB.NET程序员也在这样做。这是对@Wadih M.于2009年3月19日20:47发布的答案的一次尝试。实际上,造成差异的原因不是声明,而是不同的数据类型。尝试将x=x+1替换为:x&=x&+1-您注意到时间现在应该是相同的(因为&意味着使用长数据类型,而不是像您的示例中那样使用默认的单浮点或双浮点)。
Private Sub test2()
    zz = Timer
        For i = 1 To 100000000
            x = x + 1
        Next
    Debug.Print "No décalartion : " & Timer - zz
    yy = Timer
    Dim y As Long
        For i = 1 To 100000000
            y = y + 1
        Next
    Debug.Print "No décalartion : " & Timer - yy
End Sub