我试图在C#WinForms中构建一个注册表编辑器,并且正在努力匹配Windows'的搜索性能。内置的regedit.exe。多年来我对该程序的唯一抱怨是你不能输入一个完整的密钥路径并直接进入该密钥,所以我决定将这个功能(以及其他一些小的改进)实现到我的自己的计划。
我必须克服的第一个障碍是开发一种方法来读取典型Windows注册表中的10K左右键并将其显示给用户。从我在这里和其他网站上阅读并尝试过,似乎最快的方法就是“懒惰”#34;键入TreeView。因此,我的程序首先将五个hive密钥TreeNodes加载到TreeView中,并为每个TreeNodes加载一个虚拟子项,以便可以扩展它们。然后,当用户扩展节点时,他们的孩子也会被加载。
这相对较好,但第二个挑战是能够找到名称与给定字符串部分匹配的所有键。这与regedit.exe的F3搜索同义,只有" Keys"选中"仅匹配整个字符串"选中。我相信这会对当前选定的注册表项及其下面的注册表项执行线性深度优先搜索,然后循环到它之前的那些注册表项。所以我原本以为在我的程序中,任何搜索都不可避免地需要大量的额外加载,完全消除了从延迟加载中获得的性能优势。
然后我意识到在每次搜索迭代时,我都可以整理匹配的节点,并将它们全部添加到TreeView的末尾。这大大改善了一些事情,但是我的平均现代标准计算机仍然需要大约2分钟才能在整个注册表中搜索一个在任何地方都不存在的字符串,每个字符串大约需要2到5秒软件的发生"被发现。 regedit.exe似乎速度提高了0.5倍左右。
那么有人可以给我任何关于如何加快速度的提示吗?对于想要仔细观察的人来说,这里是full project。 MTIA: - )