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

问题描述 投票:-1回答:1

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

我无法在这里共享代码,因为项目规模巨大,无法缩小可能导致此问题的原因。尽管我已经检查了足够的代码,但是代码中没有任何东西可以使应用程序继续保留较旧的内存/对象。

我还使用转储分析工具之一检查了转储文件,发现大约50%的内存用于字符串值(所有字符串的作用域都是快速松散的,但都是大数据),其余用于;大部分内存由EF核心使用(准确地说是更改跟踪器)。我正在为数据库行列表循环进行大型json创建,但是所有这些内容都将在某个时候被释放/收集,因为它们都是受管对象列表的一部分,并且循环很快失去了作用域。

[有人在计划的.net core 2.2应用程序中遇到过类似的问题吗?当运行几天后,似乎没有触发GC收集或没有释放内存,考虑到代码似乎可以解决内存泄漏的问题。

c# .net-core garbage-collection quartz.net topshelf
1个回答
0
投票

仔细检查所有与Quartz.net相关的内容。 Quartz.net可能会挂在您认为应该进行GC处理的引用上。

如果使用像dotMemory这样的适当的内存跟踪器,则将帮助您准确跟踪哪些对象没有被释放。

© www.soinside.com 2019 - 2024. All rights reserved.