我正在开发一个VBScript Web应用程序,该应用程序有一个新引入的要求,即与注册表通信以提取连接字符串信息,而不是使用硬编码字符串。我正在进行性能分析,因为它会引入开销,并且在Process Monitor中注意到读取值会在最终返回成功之前返回两个BUFFER OVERFLOW
结果。
几年后在线查看Mark Russinovich posted about this topic,表明由于注册表项的大小未知,因此使用了144字节的默认缓冲区。由于有两个缓冲区溢出响应,整个调用所花费的时间大约翻了一倍(是的,我意识到差异是40微秒,但是每秒有1000或更多页面点击,我愿意投入一些时间在优化)。
我的问题是:有没有办法在尝试获取WMI之前告诉WMI注册表值的大小是多少?这是我用来访问注册表的代码示例:
svComputer = "." ' Local machine is simply "."
ivHKey = &H80000002 ' HKEY_LOCAL_MACHINE = &H80000002 (from WinReg.h)
svRegPath = "SOFTWARE\Path\To\My\Values"
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & svComputer & "\root\default:StdRegProv")
oRegistry.GetStringValue ivHKey, svRegPath, "Value", svValue
答案 0 :(得分:2)
在VBScript中,字符串是字符串。然而,他们需要很长时间。你没有预先确定他们的长度。此外,如果性能对您来说是个大问题,您应该考虑使用编译语言而不是解释语言(或者您之前读过的值的缓存)。