别被快速启动忽悠了
被人忽视的prefetch网络上流传着1条关于提升Windsws XP启动速度的技巧,具体方法是通过修改注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters目录下EnablePrefeteher子键,将它的键值赋为“1”。这样可以减少预读取的文件,减少进度条等待时间,效果是进度条跑一圈就进入登录画面了。
微软的技术文档解释了EnablePrefetcher被赋予不同值的含义:
0:取消预读取功能;
1:只预读取应用程序;
2:只预读取Windows系统文件。
3:预读取Windows系统文件和应用程序,这是WindowsXP的默认值。
虽然EnablePrefetcher键值设置为1后,的确可以减少预读取的文件,但系统初始化内核的工作是一个非常复杂的过程,此时需要加载很多底层的驱动程序、启动子系统以及相关的服务,即使是当我们看到了欢迎屏幕,也不能认为此时系统已经启动完成,因为系统会在后台继续初始化那些未完成的驱动程序的加载工作,虽然滚动条的动作次数较以前大大减少,但在显示欢迎屏幕之前的黑屏过程却反而有所增加,因此总的系统时间并未变化。
Prefetch目录的作用:
prefetch,预存取,这在vista用户可能知道的多些,其实xp下就有这一技术了,只是官方少有这方面介绍,更别提技术文档了。
这是xp一个隐藏的特性,用处是在xp登录进度条出现时,就把c:\windows\prefetch目录下的*.pf文件信息预先装载到内存中,以便于提高系统性能。这些*.pf文件是系统和应用程序启动时留下的预存取文件,描述了系统和应用程序每次启动时装载模块的信息和顺序,并且其命名方式中包含一个描述其完整路径的十六进制值。
另外,prefetch目录中还有一个重要文件,就是layout.ini这个磁盘布局初始化文件,它记录了所有预存取程序及文件的加载信息和顺序(按优先级排列),这也为这些程序文件的磁盘分配提供了最优化方案的依据。
说到这,不得不提一下“局部碎片整理”,按照官方所说,xp每隔3天就会自动进行一次局部碎片整理,我发现这个整理动作是分步实施的,而且是在系统空闲时才会运行,这多亏了刚装上的SSM截获了defrag的这个动作信息,连命令行参数都一并截获,这个重点留待稍后再说。(其实系统在启动时也可以进行局部碎片整理,使得启动时需要的文件能够被整理到相邻位置,这个功能可以在注册表中开启,HKLM\SOFTWARE\Dfrg\BootOptimizeFunetion下enable键由默认的N改为Y即可)用Filemon跟踪发现,系统进行局部碎片整理时,先读取layout.ini文件,然后调用defrag针对layout.ini中涉及的文件进行整理,然后把转移信息再写入到layout.ini中,这个自动整理不同于server2003系统的自动碎片整理功能(Auto Defragmenter)。
至于是否开启预存取,有不少争论,但是我坚决认为应该开启,否则系统速度会变得更慢。HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters目录下,EnablePrefeteher子键的值决定以何种方式开启prefetch,0取消,1只预存取应用程序,2只预存取windows系统文件,3同时存取系统和应用程序文件,xp默认情况下是3。以上这些prefetch相关功能依赖于task schedule计划任务这项服务。
现在该说那个重点了,系统自动调用的defrag的参数是什么?是-p -s和-b。-p后面跟着一个常量,例如5E4;-s后也跟一个常量,比如000018A4;-b后跟着盘符C:,那么这个命令行的例子就是:defrag.exe -p 5E4 -s 000018A4 -b C: 了。-b这个参数网上一直有传言,说是defrag的隐藏参数,但是官方不给出澄清,我也不知道是否真的存在,这回算是证实了。-b C:就是对预存取的文件进行局部整理,并且每次仅针对一个pf文件相关程序文件进行整理,-p和-s应该就是用来选择哪一个pf的,但具体那两个常量和被选pf文件有什么联系,还有待进一步分析。平时如果想对系统和应用程序文件进行一次优化碎片整理,可以在命令行中敲入defrag.exe C: -b,这样会对所有prefetch文件进行整理,完成后你会觉得系统的速度有一定提升。
经验之谈,如果不小心目删除了prefetch录下的文件,尤其是layout.ini文件,如何重建?敲入rundll32.exe advapi32.dll,ProcessIdleTasks命令,然后重启三次系统,就可以重建layout.ini文件,为什么是三次,我也不知道,大概和每隔三天整理一次有关系吧。
===============
===========
Prefetch文件夹是Windows XP自动创建的,主要用于加快系统启动的速度。正常运行的情况下,Windows XP会自动记录下启动时运行的每一个程序,并建立一个资料索引以加快下一次启动的时间。而当运行的程序重名时,系统会自动在程序名的后面添加一个“后缀”,随着使用时间的变长,Prefetch文件夹内会堆放许多垃圾,反而会拖慢系统,所以如果你有精力的话,还是建议对其进行定期删除。在Windows XP及其以后的操作系统中,增加了预读取功能(也可以理解为“预先装载”),该功能可以提高系统的性能,加快系统的启动、文件读取的速度,这些预读文件保存在%systemroot%\Prefetch目录中,以*.pf为扩展名,这些*.pf文件包括了载入文件的详细信息和载入顺序。
每一个应用程序,包括Windows XP的启动过程,都会在PrefetCh目录下留下相应的预读取文件,预读取文件描述了应用程序或启动时各个模块的装载顺序,其命名方式是以应用程序的可执行文件的名字为基础,加上一个“-”和描述执行文件完整路径的十六进制值,再加上文件扩展名.pf,例如QQ.EX-0065A2A1.pf。每当用户启动一个程序,会自动在Prefetch目录中对应的*.pf文件中留下一条记录。不过,Windows XP启动的预读取文件总是同一个名称,即NTOSBOOT-B00DFAAD.PF,其中包含着启动时载入文件的记录。
当下一次启动系统或运行某个程序时,Windows会参考相应的*.pf文件,将其中记录的所有文件载入内存,而不是象以往一项一项依指令逐个载入文件。另外,Windows会利用启动程序或程序的*.pf文件制订一个最优化的磁盘分配方案,这个方案的相关信息存储在Lyaout.ini文件中。
C:\Windows\Prefetch\是Windows XP的预读文件夹,Windows XP将频繁使用的数据存放在预读文件夹中,需要再次使用这些数据时可以大大加快读取速度,但随着时间的增长,这个文件夹的个头会变得越来越大,而且可能会存在一些死链文件,此时如果执行碎片整理,就有可能出现上面提到的错误,解决的办法是清空这个文件夹,然后整理碎片。
C:\WINDOWS\Prefetch文件夹中的 *.pf文件 是Windows的预读文件,使用一段时间后,预读文件夹里的文件会变得很多,导致系统搜索花费的时间变长。而且有些应用程序会产生死链接文件,加重了系统搜索的负担,使电脑运行变慢。因此,我们应该定期删除这些预读文件。
==================
Windows XP之所以自动创建Prefetch文件夹,是为了加快系统启动的进程。Windows XP将会自动记录下启动时运行的每一个程序,并根据这份资料来加快下一次启动的时间。电脑中的程序成千上万,即使出现重名的程序也不足为奇,碰到这种情况,系统将会自动在程序名的后面添加一个“后缀”,这也就是为什么有些文件名的后面会出现一连串的数字、字母和.pf的扩展名的原因.时间久了,Prefetch文件夹内自然会堆放了许多垃圾,特别是如果用户经常更换电脑配置的话,系统以前记录的进程资料就没有任何用处了。你完全可以放心大胆地将Prefetch文件夹清空,不用害怕,即使删除的文件中有有用的资料,Windows也会自动地重新创建.
[ 本帖最后由 wlj13569 于 2008-10-5 12:02 编辑 ]