返回列表 发帖

Vista真的在吃你的内存吗?——解密“Superfetch”功能

什么是vista SuperFetch技术?和prefetch有什么不同?
Vista下面的Superfetch技术,即“超级预读取”,由XP系统中的Prefetch进化而来。
下面先讲下先说什么是Prefetch:
在Windows XP操作系统中,微软对虚拟内存技术做了进一步改进,发展出了预取技术(Prefetch),预取技术的基本思路是,在载入某个程序之前,预先从硬盘上中载入一部分该程序运行所需的数据到物理内存中,这样便能加快程序的启动速度。
在WidowsXP中,使用预取技术的具体方法是:在系统和应用程序启动时,**内存页面与交换文件以及硬盘上其它文件的数据交换状况,当发生数据交换时,WindowsXP会纪录下每一个程序运行时经常需要读取的硬盘文件,并将读取的情况记录在\windows\Prefetch目录中的pf后缀名文件中一旦建立了这些pf文件,在每次需要启动系统或相应程序的时候,Windows会首先中断当前准备载入的程序,而转去查找\Windows\Prefetch目录,看是否有当前载入程序的纪录,如果有纪录,则马上按照纪录的情况载入程序运行过程中可能会用到的所需文件到物理内存中。这项任务完成之后,Windows才继续载入被中断的程序。

经过这样的处理之后,在程序运行过程中,需要读取那些文件时,由于文件已经被“预取”到内存中,此时就不用再到硬盘上进行读取,因此减轻了程序载入过程中频繁交换内存页面与交换文件的现象,改善了内存不足时程序运行的响应速度。
为了进一步优化预取操作的效率,WindowsXP还会定期对pf文件进行分析处理,组织好程序文件载入的顺序,并将这些分析处理后的信息存放在\Windows\Prefetch目录中的Layout.ini文件中。同时还会通知磁盘碎片整理程序,在下次运行碎片整理时,按照Layout.ini文件记录的内容,将相关文件的位置整理在连续的硬盘区块中。
这项技术从根本上说仍然属于被动式的调度。换句话说,只有在程序主动发起载入请求时,Windows才会进行相关的调度操作。
被动式调度的存在可能对系统性能造成一些影响。我们考虑这样一个例子,假设你有在工作的午休时间运行杀毒软件的习惯,那么在下班前,一般会停止处理工作程序,然后运行杀毒软件,此时,如果使用的是WindowsXP,那么操作系统会将工作程序所占用的内存页面写入硬盘交换文件中,并读取杀毒软件的文件载入内存。午休过后,杀毒软件已经运行完毕,但是你在重新开始使用工作程序的时候,系统仍然需要经历杀毒软件和工作程序的硬盘交换文件与内存页面的交换过程,此时程序的响应速度明显降低。
如果系统能够进一步自动记录下这些经常性的操作行为所发生和结束的时间,当时运行的前台和后台软件等等详细情况,那么在内存有空闲空间的时候,就可以在预定的时机预先将一部分文件载入到内存中,这样就避免了上面例子中发生的不愉快情况。
什么是Superfetch:
不错,这正是Windows Vista中Superfetch技术所能解决的问题。由于采用了新算法,Superfetch不但继承了WindowsXP预取技术的全部优点,还进一步具备**程序运行时状况,时间等详细情况的功能,可以根据用户的使用习惯,自动预先将存放在硬盘的交换文件转换到内存页面中去,使用户经常运行的程序启动时的速度得到进一步的加快。
Superfetch技术的中心思想是:“过分空余的内存空间即是浪费”。的确,如果一个操作系统总是保留着过多的空余物理内存耗费电能,却不能够利用这些多余的内存空间提高系统性能的话,为什么不更好地利用这些多余的内存空间呢?将这些多余的物理内存作为缓存使用,就是Superfetch技术的本质。而也正是由于采用了这种以内存为缓存的策略,才造成了Vista对内存容量的饥渴!
如果你对这项技术感到反感,或者物理内存容量实在太小,那么到管理工具—服务中关闭Superfetch服务也是一种选择。但需要注意的是,如果再次开启Supertech服务,那么由于需要经过一段**记录用户使用习惯的过程,因此需要等待较长一段时间后,Superfetch技术才能重新为系统带来明显的提速效果。

返回列表