我想知道从Windows注册表通过标准C#库读取注册表值需要多长时间(以毫秒为单位)。在这种情况下,我正在阅读一些代理设置。
我应该期望什么数量级的值? 有没有好的基准数据?
我正在运行WS2k8 R2 amd64。加分点:OS sku /版本对此措施的影响有多大?
using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software/Copium"))
{
return (string)registryKey.GetValue("BinDir");
}
答案 0 :(得分:6)
我不能引用我不知道的数字。但是在Windows Internals 5关于注册表的书中只读了30页,以下我不知道的值得注意的事情变得清晰了。
注册表是事务性的,并且具有故障保护,以防止损坏。这可能会影响性能。由于事务级别是读取提交的,因此读取不应阻止读取,因此它们应该具有高性能。
注册表缓存在内存中(无论如何经常使用的值),因此如果您经常访问一组键,性能应该在第一次点击后保持稳定。
答案 1 :(得分:2)
Raymond Chen撰写的这篇博文应该证明是有帮助的: The performance cost of reading a registry key
我想补充一点,一般情况下,不建议在C#应用程序的注册表中存储设置,使用持久存储或配置文件或其他类似的东西。处理注册表时,存在与权限相关的问题。阅读通常不是问题,但如果你要坚持不懈,那么它就会变得毛茸茸,尤其是UAC和更新的操作系统会影响复制。