我们有两个用于测试的系统,都运行最新的Win10 Pro。其中一个具有8 GB的RAM,其他32个。我们在每个二进制文件中运行相同的二进制文件并执行相同的操作。
程序在32 GB系统上的内存使用率(由任务管理器显示)上升到大约2.5 GB并停留在该位置,并且由GC引起了一些“噪音”。
在8 GB的系统上,该程序将使用尽可能多的内存,并且当全局内存使用率达到90-95%时,它似乎在运行大量的GC遍历。它的内存使用量从1.5 GB到5 GB不等。其他进程被换出,通常来说,系统最终会开始变慢。如果退出程序,或者停止它,然后按我们为这次测试而破解的GC.Collect()
按钮,那么当一切交换回来时,一切都会恢复正常。如果有用,则将pagefile.sys设置为“由Windows管理”,并且位于8 GB左右,而Windows建议使用1.8 GB(但不要进行更改)。
什么设置,.NET或Windows可能导致此问题?除了上面提到的调试按钮,我们对代码中的GC并没有做任何花哨的事情。我们有几个GC.KeepAlive()
调用,但是根据定义,这些调用什么都不做,只是扩展了变量范围。该程序不存在内存泄漏问题,我们可以无限期地运行它,并且永远不会耗尽内存。