我已经在网络上阅读了许多有关何时应使用GC.Collect()
的问题,但都没有解决这个问题。
如果我们设法以某种方式使用它,例如它释放了大量内存,这一定是一件好事,而不是简单地依靠垃圾收集器来管理内存吗?
[无论我的ASP.NET应用程序保持多空闲状态,或经过多少时间,或完成了多少操作,都不会寻址显式调用GC.Collect()
时释放的内存(只有顶部的内存才是,例如一种缓存。)
[我想到的一种理论是,可能未释放那3GB +(而是应用程序释放了超出该阈值的内存)的原因可能是由于重用了它的一部分或其他一些有用的优化,而代价是当然,可以在应用程序的整个运行期间使用该内存。
有人可以对这些问题分享一些见解吗?我会遵循最佳实践,并在有机会时处理对象。没有任何托管的资源可以定案-它总是由我处置。
编辑:使用的垃圾收集器是工作站之一,而不是服务器。
The garbage collector's job is to simulate a machine with infinite memory.如果您的系统有足够的未分配内存来继续运行,为什么收集器应该花费CPU周期执行识别未引用对象的艰苦工作?这是零成本的性能成本。
[如果单独使用,当系统内存不足时,收集器将运行并释放这3GB。在此之前,它处于休眠状态。