У меня есть много вспомогательных процедур и функций, как эти:влияние на производительность вызова много функций в VBScript
Sub LogInfo(Txt)
'Write an entry to the log file
If LogEnableInfo Then Log "Info: " & Txt
End Sub
Или это:
Function GetSettingValue(Key)
'Get the value of a setting or an empty string if the setting is not set
Dim Res
If Settings.Exists(UCase(Key)) Then Res = Settings(UCase(Key)) Else Res = ""
GetSettingValue = Res
End Function
Или это:
Sub DoExp(Exp, ErrTag)
'Execute an HS.Exp with Error handling and Debugging
Err.Clear
On Error Resume Next
HS.Exp Exp
If Err.Number <> 0 Then
LogError "HS.Exp """ & Exp & """ , Tag: " & ErrTag
Err.Clear
ElseIf LogEnablePut Then
Log "Put: HS.Exp """ & Exp & """ , Tag: " & ErrTag
End If
On Error GoTo 0
End Sub
Они действительно одни лайнеры, которые мало что делают, но я использую много раз, поэтому я не хочу вводить его каждый раз. Я также использую рекурсивные функции.
Поскольку скорость и использование памяти имеют решающее значение для моего приложения, я бы хотел знать, является ли эффект вызова функции или вспомогательной функции в vbscript
значительным воздействием на производительность? Я знаю, что в PHP это было названо проблемой производительности. Могу ли я просто пойти дальше и создать зиллионы маленьких вложенных функций, чтобы сделать все или использовать их немного более экономно?
Спасибо за этот ответ. Я согласен с пунктами 1, 2 и 3. Пункт 4 не является вариантом для того, над чем я работаю. Мне интересно, какой уровень детализации функций они перестают быть хорошей практикой программирования? – neelsg
Должно быть немного накладных расходов при вызове Sub или Function VBScript. Я не согласен с № 3, если он все равно говорит о вызове COM из VBScript. Поскольку VBScript не поддерживает раннее связывание, создание ряда поздних связанных COM-вызовов, которые требуют просмотра VTable через интерфейсы IDispatch, является самым надежным способом вызвать замедление. Это включает библиотеки «made-for-VBScript», такие как Shell, Network и FileSystemObject. Секции профиля вашего кода, чтобы найти истинные узкие места. Бритье на 1/2 секунды с суб, которое используется один раз, прекрасно. Но лучше использовать бритье на 100 мс, что называется 1000s раз. – Bond