我有很多这样的子程序和函数:
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中,这被称为性能问题。我可以继续创建数以万计的小嵌套函数来完成所有工作,还是应该稍微使用它们?
答案 0 :(得分:2)
根据我在重复使用函数的经验在VBS中是一件坏事,在我写的一个小测试脚本中,我发现使用函数的速度要慢5倍。
startTime = Timer
x = 0
For i = 0 To 1000000000
x = x + 1
Next
endTime = Timer
WScript.Echo x
WScript.Echo CStr(endTime - startTime)
startTime = Timer
y = 0
For i = 0 To 1000000000
y = fooBooGoo(y)
Next
endTime = Timer
WScript.Echo y
WScript.Echo CStr(endTime - startTime)
Function fooBooGoo(p)
g = p + 1
fooBooGoo = g
End Function
我得到的输出是:
1000000001
306.6289
1000000001
1554.875
答案 1 :(得分:1)
函数用于执行特定任务或执行特定操作。与其他语言相同,但在OOP中,它们通常被称为“方法”,至少在它们附加到类时。这意味着能够工作。功能是机器可以工作并使事物高效的过程。这是前任。用在一个句子里。机器无法正常工作。或者你可以说的是功能是工作的能力,因此数学定义将是解决方程式/问题的能力。功能意味着工作。
因此,关于使用函数re-cursive会更好,但总体上在基于对象的语言(如vbscript)中,对象应该被创建并设置=以后什么都没有实际使系统有效地消耗内存。
由于
答案 2 :(得分:1)
示例以说明“更好的工具”(#3)的含义:
使用一个ADO连接(创建一次(在VBScript中使用后期绑定))在.CSVs文件夹上执行许多SQL语句,而不是使用FSO,.Readline循环,拆分和复杂IF
使用一个.Net组件(ArrayList,StringBuilder,...)进行许多操作,而不是在本机数组上使用ReDim Preserve或在循环中使用字符串连接
炮轰dir /s /b c:\where\ever\*.vbs
而不是(错误/低效)本土/被盗的递归目录漫步者,它会查看所有文件以过滤.vbs