首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要多次调用GC.Collect()来释放一些通常不会清理的内存呢?

为什么要多次调用GC.Collect()来释放一些通常不会清理的内存呢?
EN

Stack Overflow用户
提问于 2013-04-19 02:30:11
回答 3查看 991关注 0票数 2

我在GC中发现了一件奇怪的事情,当我的应用程序删除了对许多大对象的引用时,它仍然消耗了大量的ram,在我的例子中大约是300mb。即使我调用GC.Collect(),也不会清除此内存

然后,我尝试在几秒钟内随机调用它10次,结果:释放了200mb的内存,导致我的应用程序只占用了100mb的私有内存,而不是300mb的私有内存(不是虚拟的,而是物理的/常驻的内存)。

为什么会这样呢?如何让GC自动清理内存,而无需手动调用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 02:33:25

以下任一项:

  1. 您仍然持有对某个大对象的引用,因此即使调用GC.Collect也无法清除它。
  2. 非托管内存占据了这些内存消耗的大部分。您未正确处置该非托管资源。
票数 4
EN

Stack Overflow用户

发布于 2013-04-19 02:33:53

每当需要更多内存时,垃圾收集器都会收集任何未使用的对象。只有当您没有对对象的引用时,它才是未使用的。使用内存分析器查看哪些对象正在占用您的内存,以及为什么不收集这些对象。

除此之外,您永远不需要调用GC.Collect。垃圾收集器不仅有能力,而且经过优化,可以选择何时执行。

票数 0
EN

Stack Overflow用户

发布于 2013-04-19 02:38:48

今天有很多关于GC的问题!

也许在过了这么长时间之后,它会清理掉它。如果你的程序耗尽了内存并且在没有额外调用的情况下死掉了,那么把它留在内存中,否则它可能是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16090531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档