我在应用程序中使用 Quartz.NET 3.0.7 来执行某些计划任务,但是当我启动计划程序时,它将在运行计划程序时增加内存。我还检查了简单的计划任务,并打印了一些列表控制台上的字符串错误也发生了。我也无法理解实际的问题。我的观察是完成工作后释放了 IJob 对象。 / p>
答案 0 :(得分:0)
您可能要开始运行一些性能计数器,以监视CPU使用率和内存统计信息,并了解发生了什么情况。
如果那不能导致您得到任何明显的答案,那么该开始配置文件了。
JetBrains dotTrace (不是免费的30天试用版)
答案 1 :(得分:0)
我猜您的服务定位器请求的服务在使用后没有释放。您可以通过在所请求的服务之一中实现IDisposable
接口来进行检查,并验证是否调用了Dispose()
。我想不是。
要解决此问题,您可以将服务注册为作用域,然后手动打开作用域。这样可以确保所有服务在使用后都被处置。
public async Task Execute(IJobExecutionContext context)
{
// this check is superfluous and can be omitted.
// if you want to ensure that the service locator is there, check this in the constructor.
// with a good DI framework, it can't be null.
if (this.serviceProvider != null)
{
// open the scope and dispose it after use.
using (var serviceScope = host.Services.CreateScope())
{
// get the service locator from the scope.
var services = serviceScope.ServiceProvider;
try
{
JobKey jobKey = context.JobDetail.Key;
IEmailScheduleSendService emailScheduleSendServiceNew = services.GetRequiredService<IEmailScheduleSendService>();
ILogger<EmailJob> logger = services.GetRequiredService<ILogger<EmailJob>>();
logger.LogDebug($"FROM EXECUTE METHOD | {jobKey.Name} | {jobKey.Group} | START");
await emailScheduleSendServiceNew.EmailScheduleSendAsync(context);
logger.LogDebug($"FROM EXECUTE METHOD | {jobKey.Name} | {jobKey.Group} | END");
}
catch (Exception ex)
{
logger.LogDebug($"SOMETHING WENT WRONG!");
}
}
}
}