Выигрыш в производительности объявлений переменных в VBA? - PullRequest
2 голосов
/ 19 марта 2009

Есть ли преимущество в производительности, если переменные, измеренные в начале стихов функции, объявляют их непосредственно перед их использованием?

Я использую VBA в MS Access 2003.

Пример,

 Function f(y As Long) As Long
      Dim x As Long
      If y <> 0 Then
           x = 1000000
      End If
 End Function

Стихи

 Function f(y As Long) As Long
      If y <> 0 Then
           Dim x As Long
           x = 1000000
      End If
 End Function

Ответы [ 4 ]

8 голосов
/ 19 марта 2009

Абсолютно без разницы для VBA. Объявление переменных будет влиять только на отладку во время разработки (среда IDE будет знать, что автозаполнение (intellisense) показать). В этом случае это никак не влияет на производительность. Я также сделал много макросов VBA, и это одна вещь, которую я заметил.

В качестве демонстрации просто попытайтесь установить точку останова для оператора Dim, и вы увидите, что он не позволяет вам. Это потому, что эта инструкция никогда не выполняется и используется только для управления механизмом отладки точно в срок.

Надеюсь, это поможет

2 голосов
/ 20 марта 2009

Чтобы добавить к ответу Вади М, все объявленные переменные инициализируются до компиляции процедуры, независимо от их положения в процедуре.

Чтобы проверить это, попробуйте использовать переменную, не объявляя ее (вы используете Option Explicit, верно?):

Option Explicit

Private Sub notDeclared()
    Dim x As Long

    Debug.Print x
    Debug.Print y
End Sub

Возвращает «Ошибка переменной не определена» с точкой останова, являющейся объявлением процедуры, т. Е. Перед выполнением любого кода, а необъявленная переменная y подсвечивается.

1 голос
/ 23 марта 2009

Не в исполнении самого кода, как ответил Вадих.

Но производительность в поддержании кода, конечно. Я бы сказал, что большинство программистов ожидают, что переменные будут определены в верхней части функции. Простой пример, как вы предоставили, и это не имеет значения. Но сложная функция с объявлениями переменных, вкрапленными в код, заставляет ее чувствовать себя загроможденной. Таким образом, замедляется время, чтобы прочитать и получить код. Таким образом, увеличивается время, необходимое для поддержания.

Существует также возможная проблема с объявлением переменной в цикле и без намерения. Таким образом, переменная сбрасывается при каждой итерации цикла.

И производительность самого кода часто не так важна, как производительность при поддержке кода.

0 голосов
/ 02 октября 2018

Я думаю, что вы не правы, когда говорите «Абсолютно без разницы для 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

вы получите этот результат

Без объявления: 3,746094 Со скидкой: 1,855469

Следовательно, объявление переменной улучшает производительность

1010 * привет *

...