我在GC中发现了一件奇怪的事情,当我的应用程序删除了对许多大对象的引用时,它仍然消耗了大量的ram,在我的例子中大约是300mb。即使我调用GC.Collect(),也不会清除此内存
然后,我尝试在几秒钟内随机调用它10次,结果:释放了200mb的内存,导致我的应用程序只占用了100mb的私有内存,而不是300mb的私有内存(不是虚拟的,而是物理的/常驻的内存)。
为什么会这样呢?如何让GC自动清理内存,而无需手动调用?
发布于 2013-04-19 02:33:25
以下任一项:
GC.Collect也无法清除它。发布于 2013-04-19 02:33:53
每当需要更多内存时,垃圾收集器都会收集任何未使用的对象。只有当您没有对对象的引用时,它才是未使用的。使用内存分析器查看哪些对象正在占用您的内存,以及为什么不收集这些对象。
除此之外,您永远不需要调用GC.Collect。垃圾收集器不仅有能力,而且经过优化,可以选择何时执行。
发布于 2013-04-19 02:38:48
今天有很多关于GC的问题!
也许在过了这么长时间之后,它会清理掉它。如果你的程序耗尽了内存并且在没有额外调用的情况下死掉了,那么把它留在内存中,否则它可能是不必要的。
https://stackoverflow.com/questions/16090531
复制相似问题