-1

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

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

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

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

4

1 回答 1

1

仔细检查与 Quartz.net 相关的所有内容。Quartz.net 可能会挂在你认为应该被 GCed 的引用上。

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

于 2019-10-31T10:37:30.707 回答