为什么最小化的程序常难以快速恢复响应?

本文由 极客范 - Chao Sang 翻译自 Jason Fitzpatrick。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

img_527557606f845

这看起来非常的反常:当你暂时不需要用某个程序,但又不想关闭再重启它时,我们通常会把这个程序最小化。然而,当我们重新把这个程序最大化时,会发现这个过程慢的出奇,有时候甚至比关掉重新启动一遍更费时。

今天的Q&A环节来自SuperUser——Stack Exchange的子站,这是一个社区型Q&A讨论组网站。

问题

SuperUser的用户Bart想知道为什么他最小化了程序却没给他节省下任何时间

我经常工作于Photoshop CS6和多个浏览器窗口同时开启的环境下。我并不会一直使用它们,所以有时候有些窗口会被最小化到任务栏几个小时或者几天。问题就是,当我将它们从任务栏最大化时,有时候竟然比重新启动它们还要费时!尤其是Photoshop,得等好几秒钟才终于重新显示在屏幕上,而且程序出现严重的卡顿现象,响应迟缓,有时候干脆彻底卡死1到2分钟。

这并不是硬件问题所致,因为像这样的情况一直以来在我所有的PC上都出现过。

如果将我的硬盘更换为固态硬盘,并且增加内存配置(我的主力PC当前配备了4GB内存)后,这样的情况还会出现吗?拥有高性能PC或Mac的朋友们能否告诉我,这种情况你们也遇到过吗?

我猜想系统可能使用某些技术“锁定”了当前活动的程序,并且将所有资源从那些虽运行但并未被使用的程序上释放。有没有可能用某些方式来设置程序的内存/处理器/硬盘优先级?比如Photoshop,这样它就不会在长时间闲置后变得很慢。

为什么Bart会发现最大化一个程序反而要花费更多的时间呢?这里面有什么玄机呢?

答案

SuperUser供稿者Allquixotic的解答如下:

综述

最直接的问题就是已最小化的程序被操作系统换页(Page Out)到硬盘上的“页面文件”中了。这个问题可以通过如下几个方面来改善:

  • 使用固态硬盘
  • 为系统增加内存
  • 减少打开的程序,或者升级至新的系统架构(比如Ivy Bridge或者Haswell)

这些措施中,为系统增加内存无疑是最为有效的。

解释

Windows默认当前活动的应用程序优先级高于不活动的程序,后者仅占用少量内存。当系统内存负荷过重(也就是说系统无法保证每个程序都分配到所需的内存用量),这时系统就会将最小化的程序写入页面文件——相当于系统将内存中的内容写入到硬盘上,这样一来,便可以释放最小化窗口程序所占用的内存。这一部分被释放的内存使你当前活动的程序,比如你的浏览器运行的更流畅。若是浏览器申请分配新的内存(比如创建新的标签页时),系统可以快速的完成内存分配。

这一部分“被释放”的内存同样也被用作“分页缓存”(page cache),也就是说当当前活动的程序尝试读取硬盘上的数据时,这些数据很可能会被缓存到内存中,这样就防止总是从硬盘中读取数据(内存比硬盘的速度快的多)。将绝大部分内存作为分页缓存,并将不使用的程序切换存储到硬盘上,Windows就是这样尝试着提升当前活动程序的响应速度。即,将内存分配给正在使用中的程序,并且将数据缓存到内存中而不是直接从硬盘读取。

这么做的负面影响就是,已最小化的程序可能需要等待系统将其页面文件由硬盘复制进内存后才能正常运行。页面文件越大,所需时间越长。这也就是为什么当你最大化Photoshop时会有明显的延迟。

内存速度远远大于硬盘(对于特殊类型的内存,其速度远超过硬盘数个量级)。固态硬盘速度也超出普通硬盘速度很多,但固态硬盘仍比内存慢几个数量级。将页面文件存储至固态硬盘,将对解决上述问题有所帮助。但如果你的系统由于内存负荷过重经常应用页面文件,这将会加速固态硬盘的磨损。

解决方案

以下是对当前可用解决方案及其作用的说明:

  • 安装更多的内存:建议这样做。如果当前安装的内存已达到你的硬件系统上限,你需要升级你的系统。包括主板、处理器、机箱、电源等等。如果是一台笔记本电脑,那就得买一台支持更大内存的新本。当你安装更多的内存,内存吃紧的情况就会改善,因而也就减少了页面文件的使用,于各方面都大有好处。同时,这么做也使得有更多的内存可以用于页面缓存,这使得所有的程序都会运行的更快些。如今是2013年第4季度了,我个人建议是你至少要为你的桌面电脑或笔记本安装8GB内存。如果你的工作远远不止浏览网页或收发邮件的话——比如你要处理照片、视频剪辑、游戏、音频剪辑/录制、编程开发等,都应该配备至少8GB内存。
  • 减少同时运行的程序数量: 这仅仅在当前运行的程序不会使用大量内存的情况下才起作用。不幸的是,像Photoshop这类Adobe Creative Suite套件中的应用程序一向是以海量的内存消耗而闻名的。这样做同样限制了多任务的能力。这只是一个暂时性的、尚可补救的方法。但是这么做也很麻烦,比如每次运行Photoshop前你都去关闭浏览器或者Word。而且,当你最小化Photoshop时,这种方法也无法阻止系统将它写入页面文件中。所以,这真心不是一个有效的解决方案,仅在某些特定情况下有点作用。
  • 安装固态硬盘:如果你的分页文件位于固态硬盘上,其相较于普通硬盘的速度提升将会使读写分页文件的整体性能得到提升。但请注意,固态硬盘经不起频繁且连续的写入操作,它们的写入次数是有限的。大量的页面文件对固态硬盘的寿命来说不是很好。如果你需要提高性能,同时希望延长固态硬盘的使用寿命,你应该在安装固态硬盘的同时安装大量内存。
  • 使用新的系统架构:根据系统的使用年代来看,你可能在使用过时的系统架构。“系统架构”一般由主板和处理器来定义,常常称为第N代处理架构(想象一下孩子、父母或祖父母中的辈分)。新一代的硬件通常支持更快的输入/输出、更大的内存带宽以及更少的潜在风险。并且减少了使用共享资源的组件间的冲入,取而代之的是在组件之间提供专用线路。比如,从Nehalem(2009年)这一代开始,前端总线(FSB)被精简化,打破了一直以来的性能瓶颈。因为这之前几乎所有的系统组件都需要通过同一前端总线来传输数据。取而代之的是一种“点对点”式的架构,意味着每一个组件都有其专用的线路连接至处理器。这一架构还在几年一次的更新换代中不断增强。你将会看到巨大的系统整体性能提升,这完全取决于你的电脑架构和最新的架构之间存在多深的“代沟”。例如,若将2004年的奔腾4架构升级至Haswell架构(2013年第4季度最新架构),将会比升级至2012年Sandy Bridge架构更能让你感受到巨大的性能提升。

 

 



原文链接: Jason Fitzpatrick 翻译: 极客范 - Chao Sang

译文链接: http://www.geekfan.net/4027/

[ 转载请保留原文出处、译者和译文链接。]

新浪微博: @Chao_Sang

5 评论

  1. Zhipeng  /  2013 年 11 月 28 日, 下午 6:17 回复

    楼主能介绍下mac和linux下的情况么?

    Thumb up 0 Thumb down 0

    • bigship  /  2013 年 11 月 29 日, 上午 10:34 回复

      Mac和Linux下的情况其实也大致是差不多的。因为现代的操作系统都会涉及到换页处理(也就是文章中所说的page out),在内存吃紧的情况下将不活跃的程序资源换页到硬盘中,等到再次开始使用时(最大化),再从硬盘拷贝回内存(page in)。不同的OS只是在实现细节上有所不同,这种基本理念是相通的。

      Thumb up 0 Thumb down 0

    • Kroderia  /  2013 年 12 月 1 日, 下午 11:21 回复

      这个是操作系统课程中关于内存管理的一个基本概念了

      Thumb up 0 Thumb down 0

  2. 以便以谢  /  2013 年 11 月 29 日, 上午 9:06 回复

    对这个问题确实有点印象。。

    Thumb up 0 Thumb down 0

  3. Whiskier  /  2013 年 11 月 29 日, 上午 11:33 回复

    有的时候应用程序自己也会做处理。记得Vegas在最小化的时候会把媒体资源都offline,重新显示窗口的时候再载入

    Thumb up 0 Thumb down 0

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">