SuperFetch,您受委屈了(一)
热心网友“火奴上尉”兄弟在远景上发表了一个帖子,对SuperFetch的作用提出质疑,写得很不错。
这个帖子反映不少用户的心里想法:觉得SuperFetch是Windows Vista的又一个败笔,甚至认为是微软拿来忽悠人的骗人把戏,要坚决禁用没商量。
对SuperFetch的典型质疑
“每天开机,它都帮我把飞车10先加载进去,可是我不一定先干这事啊,我工作的时候,它就必须把内存先放出来,然后再加载我的内容进去...”
其实不然
当我们分析SuperFetch的时候,一定要记住这个结论:SuperFetch预取的进程内容,并没有减少可用内存的数量!
很多朋友认为,SuperFetch在预取常用进程内容时,会大大减少可用内存的量,这是错误的认识。预取内存,只会减少空闲内存(Free Memeory),而不会减少可用内存(Available Memory)。
盆盆评注:
空闲内存:进程退出时,所释放的内存。
可用内存:进程可以直接利用的内存,而不需要将其中的内容转储到页面文件或者磁盘文件中去。可用内存包括空闲内存、备用内存(Standby List),还有零页内存(Zero Page List)
SuperFetch占用的是空闲内存,被使用的空闲内存,会计算为备用内存,也就是说,还是属于可用内存。
也就是说,尽管SuperFetch会预取飞车10的内容,但是绝对不会“在工作时,必须把内存先放出来,然后再加载我的内容进去”。
绝对不会,为什么?因为可以直接使用预取飞车10的那部分内存,而不需要事先“释放”这部分内存。
更何况如果接下来要运行的任务,被Windows检测到是以前经常运行的,那么它的内容可能早就已经在内存里了,根本不用再到硬盘里去拿,可以大大减少硬盘访问量。
这里还要顺道BS一下中文版里的任务管理器,呵呵,错把空闲内存,翻译为“可用”内存,误导了大家:
这里不妨引用盆盆在《Windows Vista使用详解》一书里所用的比喻:
假设我们要做“西红柿炒鸡蛋”,在以前的Windows系统里,在下油锅时,得先到超市里去买油(超市相当于硬盘);要炒鸡蛋时,再得到超市里临时买来鸡蛋;等放西红柿时,对不起,咱还得去超市买西红柿...等到菜炒好,恐怕胃口也没有了...千万别觉得好笑,Windows XP/2000的内存管理就是这样的。
而Windows Vista,SuperFetch会自动事先帮我们买好所需的西红柿和鸡蛋,并放在冰箱里(冰箱就相当于内存);要炒菜时,直接从冰箱里拿原材料进行加工即可。
接下来,我会用实验来演示,SuperFetch的实际意义,敬请大家期待本系列的第二篇。