到底要不要清理注册表

注册表是Windows操作系统的一个核心数据库,记载着机子的硬件信息、系统配置、用户配置等各种“高大上”的数据。对于Windows用户来说,如果不会手动修改个注册表项,简直都不好意思自称“电脑高手”。“高手”们热衷于通过regedit提升电脑运行速度、DIY系统配置,把0改成1,把1改成2,狂拽炫酷;而包括我在内的“低手”们只得望其项背,据说保不齐能把系统改瘫了,轻易不敢碰得,但有一项技能是可以轻松get的,那就是使用第三方软件清理注册表垃圾,这么做也多少能提升一点逼格,毕竟还有好多人不知道注册表这东西呢! 

可正当大家一致认为清理注册表有助于提高系统性能,正当我们抱着这份信念每天happy地做着清理时,有人却发出了“清理注册表毫无用处”的观点。唯一的逼格被否定了,坑爹呢这是!我抱着辩证批判的态度读完那些帖子,发现其中并未给出真正令人信服的原理。那么问题来了,我到底该信啥? 

注册表垃圾,就是指软件卸载后残留在注册表内的无用项,如果不进行清理,各种软件装了卸装了卸,日积月累,注册表在体积上肯定会变大。关键是,注册表会变得多大?变大后对系统性能的影响有多少?为了搞清楚这些问题,首先需要理解注册表的组成结构。

内存中的注册表

也许你每天清理着注册表垃圾,其实却根本不知道注册表这个“隐秘而伟大”的东西到底在哪。徽标键+R,运行regedit,Look!这就是传说中的注册表!其实准确地说这时打开的只是注册表编辑器,以一种便于查看和修改的形式呈现着注册表数据。

注册表编辑器

考虑到有朋友可能从未接触,简单普及一点基础知识:注册表组织结构好比文件系统,其中键的概念相当于文件夹,键值相当于文件夹里的文件,那么根键就好比根目录,子键就好比文件夹下的子文件夹,组织起来成树状结构,并不是什么高深的东西。

下面我们详细介绍这映入眼帘的五个根键。 

首先需要提到符号键的概念,HKEY_CLASSES_ROOT、HKEY_CURRENT_USER及HKEY_CURRENT_CONFIG这三个根键本质上是另两个根键中部分内容的链接,并不独立存在,相当于Windows文件系统中快捷方式的概念。不光是根键,根键下的部分子键在其他地方也会有对应的符号键,这意味着注册表编辑器所展示的内容有很多是重复的,有些甚至重复了不止两次。 

根键的链接关系

注册表中真正保存数据的只有HKEY_LOCAL_MACHINE和HKEY_USERS两个根键,所以我们说注册表编辑器所展示的不是注册表本身,而是一个更易于查看和编辑的注册表视图。下表就是各根键的功能说明。

表:根键简介

注:XP、Vista、Win7、甚至64位和32位系统下的注册表组成均略有不同,这里以Win7为主,并尽量体现各系统间的共通点。

hive文件

到现在为止,我们看到的都是在内存里的东西,既然注册表是一个存储信息的数据库,那么在磁盘上就应该能够找到对应的文件。没错,就在C盘,不是一个,是一堆(部分可能还被隐藏了起来),我们称之为hive文件。hive直译过来就是蜂巢的意思,装逼一点就译成“储巢”,当然最明智的做法还是不翻译。

为什么叫hive呢?相传有个Windows工程师十分讨厌蜜蜂,于是他的同事恶作剧,引入了蜂窝(hive)……当然有观点认为是因为键与键值组织为B-tree(谐音Bee-tree)结构,倒是十分专业的样子,但我更乐意相信第一种解释。

废话太多了,赶紧来扒一扒HKLM和HKU下各个子键所对应的文件吧。

表:键与hive文件的对应关系

说明: 

☞ hive文件包括不带后缀名的数据存储文件(如BCD、SAM)以及相应的还有带各种后缀(.LOG、.LOG1、.LOG2、.blf、.regtrans-ms等)的辅助文件,辅助文件各有作用,不再本文讨论范围,有兴趣者可参考《Deeper into the Windows Registry》一文。

☞ hive文件都是二进制格式的,一般软件打不开的哦!

☞ 可以看到,注册表中几乎所有内容在磁盘上都有着相应的hive文件,除了HKLM\HARDWARE。这里有个比较重要的概念:volatile hive。这一类hive不在磁盘上留有数据,而是在每次开机时动态收集环境信息,只存在于内存中。(想来也是,本来开机时计算机会做一个加电自检,检测所有硬件。)所以说,hive文件并不能代表注册表的全部,完整的注册表只存在于内存中。

☞ 我不知道HKLM\COMPONENTS是用来干啥的,甚至在注册表编辑器里都看不见,但它确实存在,望有高人指点。

☞ 微软给出的hive的定义是注册表中键、子键和键值的逻辑组合,而并非指文件。许多文章和论文都把hive当做hive文件本身,在不产生歧义的情况下倒也没有大碍。

实验

通常软件在安装时会在HKCU\Software(即HKU\%SID%\Software)和HKLM\SOFTWARE下写入自己必要的配置信息,如果没有足够的空间,注册表就以4KB为单位增长(所以我们在C盘看到的hive文件大小都是4K的整数倍);卸载时部分键项残留下来,形成垃圾,大有去公共厕所拉完屎不冲水的架势,简直人神共愤,如果注册表为其增长了n个4K,那么这增长的部分就得不到释放,注册表就越来越“臃肿”了。

此时我尝试性地卸载了一个软件,注册表项也确实少了,可是hive文件岿然不动,甚至与近一个月前的大小一模一样。

hive文件大小不变(NTUSER.DAT亦然)

尼玛这跟说好的不一样啊!难道是要重启?重启,不变,再重启,我在风中凌乱。由于理论上注册表更新会每隔5秒写回hive文件,也明显可以看到hive文件的修改时间确实刷新了,所以重启不重启根本没有任何影响。

是数据太小(不足4K就可能影响不了hive文件的体积)?事实上卸载前该软件的对应表项已经被我导出,确实超过4K。为找出症结所在,我一鼓作气卸了好几个软件,C盘顿时多出2G空间。这下总够了吧!谁料NTUSER.DAT还是那个NTUSER.DAT,SOFTWARE还是那个SOFTWARE。

别拦我!我要去厕所哭晕……

可是这到底怎么解释呢?原来hive文件大小并不能代表实际注册表项的大小,从注册表编辑器导出对应的二进制文件,才可以看到表项在内存中真正的体积。

hive文件体积对比(带下划线的为手动导出者)

很好,可以明显地看到内存中的hive确实缩水了。趁热打铁,在此基础上继续卸载一个暴风影音,卸载前先记录下其表项大小——32KB。

暴风影音hive导出

事实证明本OS中暴风的装卸仅作用于HKCU,对应NTUSER.DAT,导出对比。

hive文件体积对比(带2条下划线的即卸载暴风后导出者)

果然变小了,并且7944 - 7916 = 28 ≠ 32,这正是hive以4K为单位组织内容的表现。

现在就让我们来看一看,软件卸载时留下的垃圾hive有多大。我在注册表中找到几个早已卸载了的软件,多少年了,它们依然顽强地躺在那里。

垃圾hive导出

可以看出垃圾hive说大也不大说小也不小……等一下,貌似我这些例子覆盖性并不太好,怎么都是8K啊!有兴趣的朋友可以导出一些自己电脑上的垃圾hive,以弥补这单调的画面。

结论

1) 对磁盘效率的影响

到此为止,我们可以得出一个明显的结论,垃圾hive确实会增大注册表的体积,但磁盘上的hive文件似乎并不受影响。系统固定了hive文件的体积,也许是为了提高存取效率,另一方面也可以减少磁盘碎片。

2) 对内存效率的影响

那么在内存中呢?在系统运行时,内存中保存着一份完整的注册表,这意味着磁盘上的hive文件会被整个读入内存,但准确地说进入的是分页池,而分页池中长时间用不到的内容会被替换到磁盘。注册表中的垃圾项是永远也不会被访问到的,也就是说它们即使被加载到内存中,也必然会被换出到虚拟内存(磁盘),因此不会影响系统运行速度。即使不被换出,内存中的注册表组织为Map结构:

装逼图:Cell Index Translation

类似通过“学校\年级\班级\学号”的形式能快速定位一个学生,注册表项也能被快速定位,少数多余的垃圾项对查找速度并无多大影响。

3) 对开机速度的影响

那么注册表垃圾真的就人畜无害了?我想它们唯一能导致的负面影响是:增加了系统启动过程中加载注册表的时间。而这份拖累有多少呢?CHIP有一张图很能直观地说明问题:

垃圾项占比示意图(来自CHIP)

通常整个注册表在百兆左右,而垃圾项估计也占不了百K,两者是千分之一量级的关系。即使整个开机时间(假设为1分钟)都在用来加载注册表,清理垃圾项却仅能带来0.06秒的速度提升,确实只能起到心理安慰的作用了。

但即便如此,清理注册表依然具有两大显著功效:

1) 许多大型专业软件都有“洁癖”,在重装时需要彻底清理;

2) 对于强迫症用户,干掉垃圾项是件很爽的事。

参考文献

[1] CHIP. 清理注册表真的会为系统提速么?[EB/OL]. http://www.chip.cn/article-305-1.html, 2014-09-01.

[2] 月影天心. 带你认清所谓优化、内存整理、注册表清理备份还原的骗局和误区![EB/OL]. http://bbs.kafan.cn/thread-1422468-1-1.html, 2014-08-14.

[3] 毕宇. 注册表文件系统的设计与实现[D]. 成都: 电子科技大学, 2014.

[4] Mark Russinovich. Inside the Registry[EB/OL]. http://windowsitpro.com/systems-management/inside-registry, 1999-04-30.

[5] Microsoft. Windows registry information for advanced users[EB/OL]. http://support.microsoft.com/kb/256986, 2012-09-11.

[6] Wikipedia. Windows Registry[EB/OL]. http://en.wikipedia.org/wiki/Windows_Registry#Hives, 2014-11-04.

[7] 施威铭研究室. Windows 7注册表秘技大搜捕[M]. 北京: 清华大学出版社, 2010.

[8] MSDN. Why is a registry file called a hive?[EB/OL]. http://blogs.msdn.com/b/oldnewthing/archive/2003/08/08/54618.aspx, 2003-08-08.

[9] Microsoft. Registry Hives[EB/OL]. http://msdn.microsoft.com/en-us/library/ms724877(v=vs.85).aspx.

[10] Remah. Deeper into the Windows Registry[EB/OL]. http://www.techsupportalert.com/content/deeper-windows-registry.htm, 2014-07-21.

[11] Blake Morrison. Unable to restart server due to registry bloat over 2GB[EB/OL]. http://blogs.technet.com/b/askperf/archive/2014/10/22/unable-to-restart-server-due-to-registry-bloat-over-2gb.aspx, 2014-10-22.

[12] HP. Managing the System Registry Hive on Windows Server 2003 and Windows Server 2008 Integrity Systems[Z]. 2009.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容

  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,147评论 0 34
  • const char***指向常量的指针,不能修改其指向的内存中的内容。但可以修改其所指向的内存地址。指针变量是可...
    侧漏的少年阅读 798评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,867评论 0 9
  • 【什么是大数据、大数据技术】 大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法在合理时间内通过传统的应...
    kimibob阅读 2,694评论 0 51
  • hive.ddl.output.format:hive的ddl语句的输出格式,默认是text,纯文本,还有json...
    博弈史密斯阅读 1,881评论 0 6