【发布时间】:2015-01-22 00:03:00
【问题描述】:
我有一个关于this 非常有用的文章中描述为“低效内存使用”的问题。这篇文章表明,内存使用效率低下会导致内存急剧增长......我的意思是 - 戏剧性。
要回答我的问题,请先查看the article。
我的问题是:任何人都可以解释为什么 GC 的行为方式如文章的“低效内存使用”部分所示的那样吗?即使在触发 GC 之后,内存水平仍然会缓慢但肯定会上升。
我已经编辑了问题,以便更好地关注我的具体查询。一个好的答案将帮助许多开发人员更好地了解 GC,从而开发出更好的软件。
非常感谢!
【问题讨论】:
-
您无法使用一般描述来诊断特定问题。您正在查询数据库并返回比需要更多的数据是内存问题,当然,但这并不意味着它会造成内存泄漏。要找出具体您遇到的问题,您需要使用一种工具来检测内存泄漏并将其显示给您。
-
研究使用 JetBrains 的 dotTrace Memory Profiles、ANTS Memory Profiler 或任何其他内存分析器。
-
你应该运行一个内存分析器来查看哪些东西仍然被分配。或者您可以向我们展示一个可验证的最小示例,以便我们可以重现该问题。通常,当您将内容放入永远不会释放的静态位置(例如内存会话存储)时,就会出现此问题。
-
你收到
OutOfMemoryExceptions 了吗?不?它按预期工作,这就是 GC 的工作方式。 -
感谢大家的建议。我们使用 ANTS 内存分析器来确定问题出在哪里,现在我们知道它的原因是什么。事实上,随着时间的推移,我们会得到一个 OutOfMemoryException,因为内存没有被回收。即使触发了 GC,也不是所有的东西都会被回收,不管你触发它的频率如何。
标签: c# memory memory-leaks