读取注册表项的性能?

时间:2010-10-14 02:42:35

标签: performance registry

我想知道从Windows注册表通过标准C#库读取注册表值需要多长时间(以毫秒为单位)。在这种情况下,我正在阅读一些代理设置。

我应该期望什么数量级的值? 有没有好的基准数据?

我正在运行WS2k8 R2 amd64。加分点:OS sku /版本对此措施的影响有多大?

 using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software/Copium")) 
 { 
      return (string)registryKey.GetValue("BinDir"); 
 } 

2 个答案:

答案 0 :(得分:6)

我不能引用我不知道的数字。但是在Windows Internals 5关于注册表的书中只读了30页,以下我不知道的值得注意的事情变得清晰了。

  • 注册表是事务性的,并且具有故障保护,以防止损坏。这可能会影响性能。由于事务级别是读取提交的,因此读取不应阻止读取,因此它们应该具有高性能。

  • 注册表缓存在内存中(无论如何经常使用的值),因此如果您经常访问一组键,性能应该在第一次点击后保持稳定。

答案 1 :(得分:2)

Raymond Chen撰写的这篇博文应该证明是有帮助的: The performance cost of reading a registry key

我想补充一点,一般情况下,不建议在C#应用程序的注册表中存储设置,使用持久存储或配置文件或其他类似的东西。处理注册表时,存在与权限相关的问题。阅读通常不是问题,但如果你要坚持不懈,那么它就会变得毛茸茸,尤其是UAC和更新的操作系统会影响复制。