首页 > 解决方案 > 当调用 GC.Collect() 并释放超过 3GB 的空间时,这一定是一件好事吗?

问题描述

我在这个网络上阅读了很多关于何时应该使用GC.Collect()的问题,但没有一个能解决这个问题。

如果我们以某种方式设法使用它,例如它释放大量内存,这是否一定是一件好事,而不是简单地依靠垃圾收集器来管理内存?

无论我的 ASP.NET 应用程序保持多空闲,或者经过了多少时间,或者完成了多少操作,显式调用时释放的内存GC.Collect()永远不会被寻址(只有它上面的内存,就像它是某种缓存一样。 )

我想到的一个理论是,也许那些 3GB+ 没有被释放(而是应用程序释放高于该阈值的内存)的原因可能是由于重用了它的一部分,或者可能是其他一些有用的优化,代价是当然,在应用程序的整个运行时使用该内存。

有人可以就这些问题分享一些见解吗?只要有机会,我就会遵循最佳实践并处理对象。没有任何非托管资源需要最终确定——它总是由我处理。

编辑:使用的垃圾收集器是工作站之一,而不是服务器。

标签: c#asp.net.netgarbage-collection.net-4.6

解决方案


垃圾收集器的工作是模拟具有无限内存的机器。如果您的系统有足够的未分配内存来继续运行,那么收集器为什么要花费 CPU 周期来执行识别未引用对象的艰苦工作呢?这是零收益的性能成本。

如果不理会,当系统开始内存不足时,收集器将运行并释放这 3GB。在那之前它处于休眠状态。


推荐阅读