首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从外部触发GC.Collect

从外部触发GC.Collect
EN

Stack Overflow用户
提问于 2022-02-17 06:41:57
回答 2查看 239关注 0票数 0

我试图在库伯内特斯托管的.NET 5.0WebAPI应用程序中查找内存泄漏。我阅读了一些技巧和技巧,并在这里找到了一个好建议:https://www.tessferrandez.com/blog/2005/11/25/dumpheap-stat-explained.html

一个很好的技巧--如果你想知道你的漏洞在哪里,并且不想看很多垃圾收集的数据--运行一个压力测试,然后通过调用GC.Collect(3)来诱导一个GC,取一个内存转储,然后对它进行更多的压力,再次诱导一个GC,再进行另一个内存转储,比较堆上的对象。

我真的不想为这个应用程序创建一个特殊的调试方法,并将它重新部署到测试环境中。那么,我能从应用程序外部触发第2代的垃圾收集吗?

EN

回答 2

Stack Overflow用户

发布于 2022-02-17 08:00:36

您需要分析导致内存泄漏的原因。DotMemory是一个很好的分析快照的工具,您可以分析分配之间的差异并找到根本原因。

最好的做法是,在大多数情况下,不强制进行垃圾收集。CLR足够聪明,可以在适当的时候为您清理内存。

但是,如果您有必要强制GC,您可以这样做:

在API控制器中,实现ApiController的Dispose方法,并将这一行添加到其中。

代码语言:javascript
复制
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);

每次请求被服务并且控制器即将被释放时,这都会导致GC收集,这可能会影响性能。

B.您可以创建类似于api/optimize的API端点,并实现它以强制GC集合。

票数 1
EN

Stack Overflow用户

发布于 2022-02-17 07:42:17

您可能希望使用内存调试器。我使用的方法既可以触发GC,也可以捕获内存的快照,并以便于查找泄漏的方式显示结果。

您可能会自己编写一些小工具来触发GC,但是如果您得到了时间的报酬,那么只购买有助于解决问题的适当工具可能更符合成本效益。这里是一个post about different profilers,但与公认的答案相反,至少在2022年,我会说dotMemory工作得非常好。

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

https://stackoverflow.com/questions/71153541

复制
相关文章

相似问题

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