我用C#创建了一个程序,它使用了大约60-70 MB的内存。但是当我将该程序最小化时,它所需的内存较少,即只有10 MB。
当我将该程序最大化或返回到该程序时,它使用了20 MB...
这是为什么呢?
当您最小化程序时,垃圾回收器是否被调用是真的吗?
我用C#创建了一个程序,它使用了大约60-70 MB的内存。但是当我将该程序最小化时,它所需的内存较少,即只有10 MB。
当我将该程序最大化或返回到该程序时,它使用了20 MB...
这是为什么呢?
当您最小化程序时,垃圾回收器是否被调用是真的吗?
这与垃圾收集无关——非.NET程序也会出现此问题(尝试在查看浏览器的内存占用时将其最小化)。
一旦你最小化一个程序,Windows操作系统将不再需要保留UI组件在内存中,因此内存需求更低。
也就是说,当应用程序被最小化时,Windows会调整工作集。
请参阅此Channel9线程和此KB文章(感谢@Sasha Goldshtein)。
不要只看任务管理器,而应该使用 PerfMon 工具查看应用程序的内存消耗。您将看到实时内存使用情况,可以通过以下计数器来检查:
Process->VirtualBytes:Virtual Bytes 是进程正在使用的虚拟地址空间的当前大小(以字节为单位)。虚拟地址空间的使用并不一定意味着相应地使用了磁盘或主存储器页面。虚拟空间是有限的,并且进程可以限制其加载库的能力。
.NET 中的垃圾回收发生在所有对象死亡或关闭程序时。你也可以在.NET中调用垃圾收集器,但这不是通常的做法。而在最小化模式下,尽管程序仍在工作(或保持存活状态或你能称之为其他任何名称),但用户并未将其置于焦点或主动使用。因此,分配给该程序的内存使用(系统资源)会减少,以便其他程序可以使用系统资源。
SetProcessWorkingSetSize
尽可能地从RAM中剔除页面。