读取注册表键的性能表现?

6

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

我应该期望什么数量级的值? 是否有任何好的基准数据可用?

我正在运行WS2k8 R2 amd64。额外加分:操作系统sku /版本对此测量有多大影响?

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

10

我不知道具体数字,无法进行引用。但是刚刚阅读了Windows Internals 5书籍中关于注册表的30页内容,以下几点值得注意的事情我之前并不知道。

  • 注册表是事务性的,并且有故障安全机制以防止被损坏。这可能会影响性能。由于事务级别是“读提交”,因此读取不应该被写入阻塞,因此它们应该是高效的。

  • 注册表在内存中缓存(至少缓存频繁使用的值),因此如果经常访问一组键,则第一次命中后性能应保持稳定。


3
这篇来自 Raymond Chen 的博客文章应该会有所帮助:读取注册表键的性能成本 我想补充一下,通常不建议将设置存储在注册表中用于C#应用程序,而是使用持久化存储、配置文件或类似的东西。当您处理注册表时,会涉及到权限问题。读取通常不是问题,但如果要持久化数据,则会变得棘手,特别是在UAC和新操作系统上进行影像副本。

1
我正在开发的某些系统已经被锁定到了极限,以至于访问注册表基本上是被禁止的。应用数据文件夹是首选的用户数据设置存储位置,其他任何数据都必须存储在别处。 - Ken Henderson
正如我所说,这是为了检索操作系统代理设置,而不是设计选择。 - Kenn
1
我建议在博客文章的标题中添加链接 (例如 读取注册表键的性能成本| The Old New Thing) -- 这可能需要重新措辞。如果您没有时间,我可以帮您修改(等待您的许可)。 - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接