gpt4 book ai didi

c# - 长时间运行的 Windows 服务是否存在内存泄漏?或者只是看起来像一个?

转载 作者:太空狗 更新时间:2023-10-29 21:41:27 27 4
gpt4 key购买 nike

这听起来有点奇怪,但我不确定我的进程是否有内存泄漏,我希望能得到一些信息。

我最近被分配调查为什么生产中的 Windows 服务消耗大约 1 GB 的内存(它运行的服务器有 8 GB)。这超出了我作为开发人员的经验,但对我来说这是一个很好的机会,可以了解垃圾收集在 msdn 和其他来源上的工作原理。但在这一点上,我对/何时/集合实际运行感到非常困惑,在这一点上,我读过的所有文章都是含糊不清的。

1) 我发现了一个特定的操作,每次执行它都会增加 ~30kb 的内存。2) 我已经非常仔细地检查了代码并相信我正确地关闭了所有内容并删除了引用3) 我使用了几个内存分析器,它们似乎都表明我的旧对象与 gc 相关联。4) 如果我让进程完全空闲几天,内存使用量突然下降到 ~8 兆

因此,基于此,我什至不确定我是否存在内存泄漏。鉴于 GC 是一个昂贵的过程,是否有可能我在生产中增长到 1 gig 只是因为仍然有免费的 ram,并且获得它比运行 GC “便宜”?特别是考虑到这项服务每秒运行 6 次?如果是这种情况,我有什么选择?我的理解是我不能强制触发 GC,我有什么办法吗?

感谢您提供的任何意见,我意识到 csharp 中的内存泄漏和 gc 是一个很深的主题,如果有关于该主题的特别有用的读物​​,我也很乐意指出这一点。

最佳答案

您当然可以强制执行垃圾回收 - 只需调用 GC.Collect。并不是你不能,而是垃圾收集器通常比你更能确定它应该运行的时间。但在这里,您可以显式调用它 - 作为调试工具 - 以查看分配的内存是否符合回收条件。

关于c# - 长时间运行的 Windows 服务是否存在内存泄漏?或者只是看起来像一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com