为什么在连续运行的基于 .Net CORE 2.2 + EF Core 的计划控制台中无法释放内存



我有一个 .Net core 2.2 控制台应用程序,它在内部使用 EF core 进行数据库调用。它使用顶层架和 quartz.net 作为计划服务运行。 我观察到这个控制台的内存使用量不断增加,直到它达到服务器 RAM 的 90%,我不知道它是否可以继续占用比这更多的 RAM,因为一旦达到该余量,我通常会关闭它并重新启动。

我无法在这里共享代码,因为项目很大,无法缩小可能导致这种情况的原因。虽然我已经检查了足够的代码,并且代码中没有任何内容可以使应用程序继续保留较旧的记忆/对象。

我还使用转储分析工具之一检查了转储文件,看到大约 50% 的内存被字符串值(所有松散范围快速但都是大数据(和休息使用;大部分内存由 EF 核心使用(准确地说是更改跟踪器(。 我正在循环为 db 行列表创建大型 json,但所有这些都应该在某个时候被释放/收集,因为这些都是托管对象列表的一部分,并且循环会迅速失去其范围。

有没有人在计划的.net Core 2.2应用程序中遇到类似的问题 考虑到代码似乎可以解决内存泄漏问题,似乎没有触发 GC 集合或在运行几天时通常不会释放内存

仔细检查所有涉及 Quartz.net 的内容。 Quartz.net 可能挂在你认为应该被GCed的参考文献上。

如果您使用适当的内存跟踪器,例如dotMemory将帮助您准确跟踪未释放的对象。

相关内容

最新更新