<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[gOxiA=苏繁=SuFan Blog]]></title> 
<link>https://sufan.maytide.net/index.php</link> 
<description><![CDATA[gOxiA,苏繁,sufan,Microsoft MVP]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[gOxiA=苏繁=SuFan Blog]]></copyright>
<item>
<link>https://sufan.maytide.net/read.php/165.htm</link>
<title><![CDATA[Superfetch  Prefetch]]></title> 
<author>gOxiA &lt;sufan_cn@msn.com&gt;</author>
<category><![CDATA[Windows Client]]></category>
<pubDate>Wed, 13 Jun 2007 01:41:51 +0000</pubDate> 
<guid>https://sufan.maytide.net/read.php/165.htm</guid> 
<description>
<![CDATA[ 
	<p>      今天浏览一些达人的Blog时看到了关于Superfetch的讨论，看来还是有很多网友对Superfetch不了解，其实Superfetch和Prefetch都是微软针对系统而设计开发的一项内存管理技术也就是内存的预取技术，而Superfetch（超级预读取）是内置在Vista系统中的，实际上由XP中的Prefetch演变而来，他们的工作机制大体相同。</p><p>      自己不想再去陈述他们之间的特性和概念，所以从网上摘抄来一部分资料供参考：</p><p><div class="code">什么是Vista SuperFetch技术？和prefetch有什么不同？</p><p>Vista下面的Superfetch技术，即“超级预读取”，由XP系统中的Prefetch进化而来。</p><p>下面，先讲下先说什么是Prefetch：</p><p>在Windows XP操作系统中，微软对虚拟内存技术做了进一步改进，发展出了预取技术（Prefetch），预取技术的基本思路是，在载入某个程序之前，预先从硬盘上中载入一部分该程序运行所需的数据到物理内存中，这样便能加快程序的启动速度。</p><p>在Widows XP中，使用预取技术的具体方法是：在系统和应用程序启动时，监视内存页面与交换文件以及硬盘上其它文件的数据交换状况，当发生数据交换时，Windows XP会纪录下每一个程序运行时经常需要读取的硬盘文件，并将读取的情况记录在\windows\Prefetch目录中的pf后缀名文件中，Vista之家特别截图如下：</p><p>一旦建立了这些pf文件，在每次需要启动系统或相应程序的时候，Windows会首先中断当前准备载入的程序，而转去查找\Windows\Prefetch目录，看是否有当前载入程序的纪录，如果有纪录，则马上按照纪录的情况载入程序运行过程中可能会用到的所需文件到物理内存中。这项任务完成之后，Windows才继续载入被中断的程序。</p><p>经过这样的处理之后，在程序运行过程中，需要读取那些文件时，由于文件已经被“预取”到内存中，此时就不用再到硬盘上进行读取，因此减轻了程序载入过程中频繁交换内存页面与交换文件的现象，改善了内存不足时程序运行的响应速度。</p><p>为了进一步优化预取操作的效率，Windows XP还会定期对pf文件进行分析处理，组织好程序文件载入的顺序，并将这些分析处理后的信息存放在\Windows\Prefetch目录中的Layout.ini文件中。同时还会通知磁盘碎片整理程序，在下次运行碎片整理时，按照Layout.ini文件记录的内容，将相关文件的位置整理在连续的硬盘区块中。</p><p>这项技术从根本上说仍然属于被动式的调度。换句话说，只有在程序主动发起载入请求时，Windows才会进行相关的调度操作。</p><p>被动式调度的存在可能对系统性能造成一些影响。我们考虑这样一个例子，假设你有在工作的午休时间运行杀毒软件的习惯，那么在下班前，一般会停止处理工作程序，然后运行杀毒软件，此时，如果使用的是Windows XP，那么操作系统会将工作程序所占用的内存页面写入硬盘交换文件中，并读取杀毒软件的文件载入内存。午休过后，杀毒软件已经运行完毕，但是你在重新开始使用工作程序的时候，系统仍然需要经历杀毒软件和工作程序的硬盘交换文件与内存页面的交换过程，此时程序的响应速度明显降低。</p><p>如果系统能够进一步自动记录下这些经常性的操作行为所发生和结束的时间，当时运行的前台和后台软件等等详细情况，那么在内存有空闲空间的时候，就可以在预定的时机预先将一部分文件载入到内存中，这样就避免了上面例子中发生的不愉快情况。</p><p>什么是Superfetch：</p><p>不错，这正是Windows Vista中Superfetch技术所能解决的问题。由于采用了新算法，Superfetch不但继承了Windows XP预取技术的全部优点，还进一步具备监视程序运行时状况，时间等详细情况的功能，可以根据用户的使用习惯，自动预先将存放在硬盘的交换文件转换到内存页面中去，使用户经常运行的程序启动时的速度得到进一步的加快。如下图：</p><p>Superfetch技术的中心思想是：“过分空余的内存空间即是浪费”。的确，如果一个操作系统总是保留着过多的空余物理内存耗费电能，却不能够利用这些多余的内存空间提高系统性能的话，为什么不更好地利用这些多余的内存空间呢？将这些多余的物理内存作为缓存使用，就是Superfetch技术的本质。而也正是由于采用了这种以内存为缓存的策略，才造成了Vista对内存容量的饥渴！</p><p>如果你对这项技术感到反感，或者物理内存容量实在太小，那么到管理工具—服务中关闭Superfetch服务也是一种选择。但需要注意的是，如果再次开启Supertech服务，那么由于需要经过一段监视记录用户使用习惯的过程，因此需要等待较长一段时间后，Superfetch技术才能重新为系统带来明显的提速效果。</div></p><p>      其实大家对该项技术的顾虑完全没有必要，如果你认为由此带来的一些系统性能下降开机速度变慢，可以进入“C:\WINDOWS\Prefetch”目录，将其下所有文件删除，之后重新启动计算机，这个时间内不要去使用计算机，待整个系统完全启动完毕后再次重新启动。之后你就会发现系统启动速度明显变快，程序的运行速度也会明显变快！</p><p>      注意：以上为个人经验，并在XP下实验有效，因目前没有运行Vista的系统，所以无法验证Vista。</p>
]]>
</description>
</item>
</channel>
</rss>