Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在连续运行.Net CORE 2.2+;基于efcore的调度控制台_C#_.net Core_Garbage Collection_Quartz.net_Topshelf - Fatal编程技术网

C# 为什么在连续运行.Net CORE 2.2+;基于efcore的调度控制台

C# 为什么在连续运行.Net CORE 2.2+;基于efcore的调度控制台,c#,.net-core,garbage-collection,quartz.net,topshelf,C#,.net Core,Garbage Collection,Quartz.net,Topshelf,我有一个.Net core 2.2控制台应用程序,它在内部使用EF core进行db调用。它使用topshelf和quartz.net作为定时服务运行。 我观察到这个控制台的内存使用量一直在增加,直到达到服务器RAM的90%,我不知道它是否能继续占用更多的RAM,因为一旦达到这个限度,我通常会关闭它,然后重新启动 我无法在此处共享代码,因为项目庞大,无法缩小可能导致此问题的范围。 虽然我已经检查了足够多的代码,但代码中并没有任何东西可以让应用程序继续保留旧的内存/对象 我还使用一个转储分析工具检

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

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

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

有没有人在计划的.net core 2.2应用程序中遇到过类似的问题 考虑到代码可能会导致内存泄漏,所以在运行几天之后,通常不会触发GC集合或释放内存


仔细检查与Quartz.net有关的所有内容。Quartz.net可能挂在您认为应该GCed的参考上


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

可能重复@JoshuaRobinson,我不确定您是否否决了这个问题,还是没有否决“可能重复”。如果你没有支持否决票,那么请忽略这一点,留给支持否决票的人,但如果你支持了,那么这个问题或其答案根本不可能重复,因为这些都不适合这里。到目前为止,我已经用EF编写代码很多年了,没有这些问题,也不需要那些新手的建议来修复EF中的内存泄漏。我正在处理的是一个.Net/EF核心控制台应用程序,它可以连续运行数天,每天24小时,并且不会为未使用的对象释放任何内存。在看到类似的东西后,我问了这个问题:以及.Net控制台上类似的东西。