我问这个问题是出于后人的原因和普遍的兴趣。几年前,我注意到Windows中有一种奇怪的行为。我知道这可以在XP中运行,那时它也适用于Windows 2000甚至98,我认为这种行为仍适用于Windows 7。
要设置我的问题,请按照以下步骤尝试此实验。
恢复窗口之后,您应该确定应用程序的内存使用率应该稍微高一点,但不会像应用程序最小化之前那样接近。这与任何基于GUI的应用程序非常一致,但对于更大的应用程序来说肯定更为深远。
问题
在操作系统内部,正在发生什么过程强制进行此(假定的)垃圾收集?此外,通过COM或某些.Net调用有没有办法强制执行此过程而不会最小化应用程序?如果是,请提供源代码。语言并不重要。
如果你像我一样,你可以同时打开很多应用程序。内存使用量可能会上升......升级......在您知道之前,您需要关闭一些应用程序以释放资源。如果我至少可以集成到我控制了一种机制来强制从操作系统中进行垃圾收集的软件,那将是很好的,类似于上述练习中的行为。
我知道在.Net中有一个GC对象,您可以根据需要调用垃圾清理。但是,它似乎与应用程序最小化时发生的内存清理的性质有关。
我希望这是一个令人头疼的问题,经过多年的好奇,有人可以给我一个关于正在发生的事情的良好技术解释。
页面文件并进一步深入“兔子洞”
有趣的东西已被贴出来作为Kragen&的这个问题的答案。 Alex K.在阅读他们发布的Knowledge Base article时,我发现还有一种方法可以防止这种情况发生。有什么时候可以阻止这种分页的发生?我正在尝试阅读文档,尽可能多地了解这一点。很多这些信息对我来说都是新的,因为我从来不需要在.Net应用程序中实现任何这些信息。考虑一个用例可以帮助我理解为什么以及何时我想避免这种行为的原因。
答案 0 :(得分:7)
您正在看到的过程是不垃圾收集 - Windows正在“修剪工作集”(即尽可能多地分配内存到磁盘)以释放前台应用程序的内存。
有关详细信息,请参阅以下链接:
上面链接的知识库文章介绍了如何防止这种情况自动发生(通过拦截WM_SYSCOMMAND
命令),以及如何在任何时候明确导致此情况发生(通过调用SetProcessWorkingSetSize
)。
答案 1 :(得分:6)
最小化窗口会导致该进程的trim the working set窗口为剩余的前台应用程序带来好处(通过调用SetProcessWorkingSetSize()
完成)。