这可能与编程无关,但与OS结构有关。
在具有3GB内存的全新笔记本电脑上运行Vista 32位,运行空闲系统消耗大约40%的内存。除此之外,这本身就是一个令人愤慨的事实,操作系统应该能够很好地适应所有进程到内存中而不需要交换到磁盘EVER。
然而,看着任务管理器,我发现进程始终存在页面错误。虽然不多,但仍然如此例如,explorer.exe每秒大约有一个。
为什么?为什么OS虽然有足够的物理内存,但仍觉得需要换页?
答案 0 :(得分:3)
页面错误并不一定意味着某些内容被分页到磁盘。现代操作系统具有页面可能处于的许多级别的状态,例如,Windows可能会区分正在使用的内存页面和一段时间内未被触摸的内存页面,并且可以被分页如果需要,到磁盘。 (这使得寻呼机的工作变得更容易,因为它只需要查看第二种类型的页面以找出它可以分页的页面。)现在,页面如何从第二个状态返回到第一个状态?内核在该页面上设置了一点,表明如果有任何访问它,那么页面将被标记为“活动”并移回到第一个状态。这会导致页面错误。
其他可能导致页面错误的事情是内存映射文件。应用程序请求将文件映射到内存,即只要应用程序想要从中读取文件,它就会在内存中出现。显然,将整个文件一次性加载到内存中会非常昂贵,所以内核只是标记了内存空间,如果有人访问过那么“请页面错误”位,并且如果应用程序触及该内容,则从磁盘读取页。
真实情况要比上面情况复杂得多,但这应该让你对可能发生的事情有一个大概的了解。
答案 1 :(得分:3)
当您查看任务管理器时,资源管理器每秒都会出现一次网页故障,这是完全合乎逻辑的。任务管理器每秒更新一次,这也将更新通知区域中的图形。它是explorer.exe管理通知区域及其图标。因此每次任务管理器更新它的小图时,资源管理器都需要从taskmgr.exe加载相应的图标,这会导致页面错误。 (阅读Raymond Chen's excellent blog)
的更多信息我很确定Raymond Chen解释了其他一些页面错误的“问题”,但我现在找不到文章。基本上,页面错误并不总是意味着必须从磁盘加载某些内容。
答案 2 :(得分:1)
闲置系统会消耗大约40%的内存。
每当我听到这个消息时,我都会想知道为什么人们会抱怨软件利用系统资源。作为一个用户,我更喜欢操作系统占用我的内存的40%(假设它没有被使用)进行积极的预取和缓存;它使得最终体验更好,因为系统会有更多的内存命中(和更少的页面错误)。
至于广泛的分页,我认为(但不确定)这是另一种积极的缓存策略。如果系统内存分别成为满(如果你正在运行的虚拟机或其中两个是在说1 GB和几个大的应用程序,如Visual Studio,甚至在4GB很容易),系统将不得不页在将磁盘从磁盘读入内存之前,将一些内存块输出到磁盘。如果操作系统在空闲时间积极地将非活动内存分页到磁盘,则可以在另一个进程发生页面错误时保存该操作。
答案 3 :(得分:0)
当然,Vista使用计算机启动和运行速度更快的内存。当其他程序需要时,它会释放/交换内存。
为什么不使用ressource,如果它存在并且可以在以后发布而没有问题?
关于页面错误,请参阅此说明,任务管理器创建: http://blogs.msdn.com/oldnewthing/archive/2008/08/21/8880075.aspx
(简短摘要,每次任务管理器更新系统托盘图标时都会出现一页错误。将任务管理器更新速度设置为高,您将获得更多页面错误。这些页面错误没有内存交换)
答案 4 :(得分:0)
是的,我注意到了同样的事情。它也适用于Windows XP。
基本上,似乎Windows有一个关于交换的“快速分配”策略:保留大量内存,以便在需要时可用。在存储器受限制的计算机上,这是一种有一定意义的策略。加载大型程序会导致一些交换,所以系统会提前做到这一点 当然,在具有大量内存的系统上,这没有任何意义。在我的一台计算机上,我有XP 3 GB的RAM。如果我关闭页面文件,计算机会更快! 此策略也会影响“shell加载”时间:shell加载是指在您登录和实际使用计算机之间发生的任何事情。交换是在加载大量常驻托盘图标程序的同时进行的,导致磁盘使用效率非常低。
在我安装Linux的其他计算机上,它有不同的策略:从不使用swap,除非没有更多的内存。由于Linux在内存消耗方面通常非常小(应用程序是真正的生猪),这是一个很好的策略,这会导致更快的“shell加载”时间。如果你有足够的内存,交换文件基本上会被关闭,直到需要它为止。
答案 5 :(得分:0)
“自由记忆”是一个有问题的术语。在任何给定时刻,最好是所有字节都在磁盘和RAM中。这样,如果任何程序突然2GB,操作系统可以满足该请求而无需磁盘I / O.只需将RAM归零。这是正确的,无论字节是逻辑“文件字节”(即RAM是高速缓存)还是“进程字节”(即磁盘字节被分页)。
显然,出于工程原因,您无法在磁盘和RAM中同时拥有所有字节。但你肯定不应该因为它们也在磁盘上而把RAM中的字节丢掉。如果你有一个旋转的磁盘和RAM页面在一分钟内没有改变,那么先发制人地写出字节是有意义的。您可能希望操作系统以低优先级执行此操作,但优先级I / O在Windows上较少见(Vista新增,老实说这是1.0实现)