当程序最小化时,计算机使用的资源是否更少?

jao*_*jao 94 windows-7 performance resources

当程序在 Windows 7 中最小化时,它们使用的内存和 CPU 是否比保持最大化时少?

kin*_*juf 67

是的。根据 MS 支持,最小化应用程序的工作集被修剪。您可以使用 Process Explorer 自行检查。

这是在 Windows 7 x64 中对 Firefox 5.0 的单个实例进行的测试,其中加载了 ESPN.com 网站的单个选项卡。使用任务管理器读取值。

type                 not minimised  minimised     diff
------------------------------------------------------
working set               165,752k   163,768k  -1,984k
peak working set          169,624k   169,624k      N/A
mem (private working set) 121,600k   119,576k  -2,024k
commit size               135,576k   133,504k     -72k
paged pool                    396k       397k      +1k
np pool                        82k        81k      -1k
handles                        504        483      -21
threads                         34         31       -3
user objects                    40         44       +4
GDI objects                     71         75       +4
Run Code Online (Sandbox Code Playgroud)

这是在 Windows 7 x64 中测试 Paint.NET 的单个实例,并打开一些小图像。这个应用程序是用 Microsoft .NET 编写的,与 Firefox 几乎肯定是 C/C++ 不同。

type                 not minimised  minimised     diff
------------------------------------------------------
working set               125,904k   125,256k    -684k
peak working set          217,836k   217,836k      N/A
mem (private working set)  61,844k    61,844k       0k
commit size               102,388k   102,384k      -4k
paged pool                    542k       541k      -1k
np pool                        59k        59k       0k
handles                        741        741        0
threads                         19         19        0
user objects                   276        273       -3
GDI objects                    489        491       +2
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于现代版本的 Windows(7、Vista)。在现代操作系统上,如果某些事情需要内存,操作系统将修剪*所有*进程的常驻工作集,无论是否最小化(基于它们最近访问内存页面的时间)。如果出于某种原因不需要内存,那么修剪它是愚蠢的——为什么在内存充足的情况下无缘无故地降低应用程序的性能? (57认同)
  • 哇,这很有趣,你有一个知识库来支持它。+1 (7认同)
  • 哇,所以人们不喜欢答案......有没有人有相反的证据?我的看法 Kinokijuf 实际上有一些证据,你们说它不适用于 windows 7 和 vista 但没有提供源...你们甚至不测试它:\ 工作集和分配的内存是两个不同的东西. 进程资源管理器是对此进行测试的唯一方法。 (6认同)
  • 似乎值得注意的是,系统资源使用的减少是微不足道的:在给出的示例中,通过最小化应用程序,工作集仅减少了约 1.2%。 (5认同)
  • 请注意此评论线程中缺少 Win32 开发人员。有许多 Win32 事件会跳过最小化的应用程序。即使没有显着的内存节省,也肯定会节省 CPU 使用率。 (5认同)
  • @Jon:它没有说明它不适用于 Vista。它只是在 Vista 之前编写的。 (4认同)
  • 正如@DavidSchwartz 所说,没有证据表明这适用于 Windows Vista 及更高版本。正如KB所说,它只适用于Win200和XP。除非您能找到适用于 Windows 7 的类似知识库,如此答案明确指出的那样,否则这不是正确答案。 (3认同)
  • 这也使其他答案完全错误...... (2认同)
  • 我可以在我的 Vista 机器上(使用 Process Explorer)确认工作集确实下降了。 (2认同)

Tim*_*ham 28

是和否。它们将在您的 GPU 上使用更少的资源——更少需要屏幕刷新——但不会在您的主系统内存或 CPU 上使用。

任务管理器中显示的工作集大小不是应用程序消耗的实际内存量。它更像是在给定时间点可以使用多少的上限。

如果另一个应用程序请求分配给一个未处于活动状态的进程的工作集的内存,则可以在不更改应用程序实际使用的内存量的情况下降低此数字。

  • @Kyle 那篇知识库文章已有 5 年历史。它不适用于现代内存管理方案。(如果你看到我对 kinokijuf 的回答的评论,你就会明白为什么它首先是一个坏主意——除了在无法跟踪页面使用情况的操作系统上。) (14认同)
  • 我可以在我的 Vista 机器上(使用 Process Explorer)确认工作集仍然下降。 (4认同)
  • @Lieven 有问题的路线,至少对我来说,以及为什么不赞成:“他们将在您的 GPU 上使用更少的资源 - 对屏幕刷新的需求更少 - 但不会在您的主系统内存或 CPU 上。” 问题明确指出:“他们使用的内存和 CPU 是否比让它们最大化时使用的内存和 CPU 更少”,至少根据 MS 的说法(我会在这里信任 MS,因为他们确实写了它),是的,它使用的资源更少。他不会询问应用程序在最小化时的性能,只要它会使用更少的资源。 (3认同)
  • 脚注指出它适用于 NT4、2000 和 XP。我怀疑从那以后有什么改变。 (2认同)

use*_*686 12

“工作集”与“内存使用”不同

如果一个程序需要一块内存,它总是需要它。如果没有,那么就没有。最小化程序不会突然使程序“不需要”内存。“修剪”工作集只是将内存从物理内存分页磁盘上,或者如果它在磁盘上的其他地方可用,则简单地删除该页面。(在后一种情况下,如果内存不足,操作系统无论如何都会这样做,所以这只是一个缓存问题,而不是“使用”问题。)在任何一种情况下,它都不会减少程序使用的内容;它只是数据重新定位到其他地方。

也就是说,关于 CPU 使用率:操作系统在某些情况下会提供一种称为优先级提升的东西,这确实会导致前台应用程序使用更多 CPU。有关详细信息,请参见此处


iTo*_*Tom 5

这实际上取决于您所讨论的应用程序以及应用程序的编码方式;然而,为了进行比较,我们假设程序的编码方式是在最大化和最小化时运行相同的函数。

因此,如果应用程序调用相同的底层函数,我们希望程序在最小化时使用相同数量的 CPU。

然而,当程序最小化时,您的系统进程肯定会使用更少的 CPU,因为用于应用程序查看的图形将减少,现在可能只是一个系统托盘图标。

也就是说,除非在最小化应用程序时导致更多图形应用程序进入视图并因此进行渲染,否则现在 CPU 负载可能会由于额外的图形工作负载而增加。

总而言之,除非您使用的是规格非常低的机器,否则我们在这里讨论的所有更改可能可以忽略不计。

  • 当明确并涵盖两种可能性时,没有意识到假设是一件坏事。 (3认同)