访问Windows注册表时设置字符串缓冲区的大小

时间:2015-06-26 17:36:55

标签: vbscript registry wmi

我正在开发一个VBScript Web应用程序,该应用程序有一个新引入的要求,即与注册表通信以提取连接字符串信息,而不是使用硬编码字符串。我正在进行性能分析,因为它会引入开销,并且在Process Monitor中注意到读取值会在最终返回成功之前返回两个BUFFER OVERFLOW结果。

Registry Work

几年后在线查看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

1 个答案:

答案 0 :(得分:2)

在VBScript中,字符串是字符串。然而,他们需要很长时间。你没有预先确定他们的长度。此外,如果性能对您来说是个大问题,您应该考虑使用编译语言而不是解释语言(或者您之前读过的值的缓存)。