快速读取所有注册表值的方法

Jon*_*n B 6 .net c# registry

我正在编写一个实用程序,需要在HKCR中创建所有注册表值的列表.我这样做是使用递归函数:

var list = new Dictionary<string, string>();
Read(Registry.ClassesRoot, list);

static void Read(RegistryKey root, IDictionary<string, string> values)
{
    foreach (var child in root.GetSubKeyNames())
    {
        using (var childKey = root.OpenSubKey(child))
        {
            Read(childKey, values);
        }
    }            

    foreach (var value in root.GetValueNames())
    {
        values.Add(string.Format("{0}\\{1}", root, value), (root.GetValue(value) ?? "").ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但需要很长时间(我的电脑上有20秒).有没有更快的方法来做到这一点,还是这样做得好?

Swo*_*ble 1

注册表中有很多信息,正如其他人在这里指出的那样 - 速度可能是一个问题。如果您希望以树状视图显示注册表设置列表以供用户浏览,更好的解决方案可能是首先扫描顶级条目,然后当用户浏览树时,扫描这些条目树节点打开时的子值/设置。

我怀疑这就是微软自己的注册表的工作原理。