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/2003操作系统中有一个名为prefetcher的服务,这是微软采用的一种全新系统后台数据预读机制,它可以提高系统性能,加快Windows XP/2003的启动速度,经过预读的程序全部存放在系统所在文件夹下的prefetcher目录中 在预读文件中有记录的文件,在启动时系统将会对他们进行预读,可以提高这些文件运行的速度。 使用一段时间后,预读文件夹里的文件会变得很多,导致系统搜索花费的时间变得很长。而且有些应用程序会产生死链接文件,进而加重了系统搜索的负担。因此,我们应该定期删除这些预读文件,用以提高开机速度。不用担心这样会影响预读功能的效果,过一段时间后,系统又将自动生成这些文件。
Windows XP/2003虽然采用了预读取机制,但是默认设置下比较保守,我们可以自己来定义程序的预读取方式,大幅度提高系统的性能。 点击“开始”菜单中的“运行”,在“运行”对话框中输入regedit回车,打开注册表编辑器,在注册表中顺次展开以下分支:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters,在右边的窗口中把DWORD值“EnablePrefetcher”的键值改为你需要的就可以了(图2)。EnablePrefetcher的键值可以从0、1、2、3这几个数值中进行选择,其中键值为“0”表示关闭预读功能;键值为“1”表示只对应用程序进行预读;键值为“2”表示只对启动项进行预读;而键值为“3”则表示对应用程序和启动项都进行预读。对采用主流配置的电脑推荐将EnablePrefetcher的键值设定为“3”,而对于配置比较差的电脑,推荐采用“1”,对于PII等老机器推荐将EnablePrefetcher的键值设定为“0”,因为预读取机制对这样的老电脑已经“有心无力”了。 |