7

我正在编写一个实用程序,需要在 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());
    }
}

这很好用,但需要很长时间(在我的电脑上是 20 秒)。有没有更快的方法来做到这一点,或者这是否尽可能好?

4

1 回答 1

1

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

我怀疑这就是微软自己的 regedit 的工作方式。

于 2012-11-26T16:00:18.120 回答