内存探查器数据
我有一个用DotnetCore 3.1和Hangfire 1.7.8编写的服务。 我看到异常高的内存使用率,并且大部分内存被 TimerQueueTimer 对象消耗,尽管我没有显式初始化任何计时器。
由于我最初是在 Dotnetcore 2.2 中创建的,因此它使用旧的服务结构如下:
internal class HangFireService : ServiceBase
{
}
在服务启动时以及任务完成时添加的作业如下所示:
if(!_hangfireHelper.GetJobs(typeof(GenericTask), taskName).Any())
{
BackgroundJob.Schedule<GenericTask>(d => d.RunTask(null), TimeSpan.FromMinutes(5));
}
如何减少计时器的使用量?
最后事实证明,与 Hangfire 无关,但高内存使用率的根本原因是因为 Serilog。
我创建了一个虚拟日志类,并注入到我的所有服务中,并且所有TimerQueueTimer对象都消失了。下面是另一个内存探查器映像:
内存示例
Serilog 使用情况如下:
public Logger Logger()
{
var log = new LoggerConfiguration()
.ReadFrom.Configuration(_configuration)
.CreateLogger();
return log;
}
用法:
using( var log = Logger())
{
log.LogInformation(...)
}
不知何故,serilog 没有释放计时器对象......