Мне нужно иметь IHostedService или «Worker Service», но я столкнулся с интересной загадкой, которая заключается в том, что сборщик мусора не запускается в «подходящее» время.Скорее он просто не собирает никаких ресурсов, в результате чего приложение просто увеличивает использование памяти (во время отладки GC вообще не происходит).
Я сделал все мыслимые вещи, включая выполнение всех моих задачвернуть некоторое значение и, используя, где это возможно, операторы использования.Также абстрагирование нескольких слоев с помощью Dependency Injection (чтобы убедиться, что есть несколько мест, которые должны сообщать среде выполнения, что это подходит для запуска сборки мусора.
Мое единственное «решение», которое не является решением,является ручным запуском GC.Collect ();
namespace Worker
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation($"Worker running at: {DateTime.Now}");
var files = Directory.EnumerateFiles(@"C:\\repos\");
var date = files.Select(f => File.ReadAllBytesAsync(f));
GC.Collect();
}
}
}
}
В результате мой код, без ручного запуска GC, будет раздуваться, чтобы максимально использовать доступную память, однако при ручном GC это может выполняться длячасов без заметных изменений в использовании ресурсов
Решение Использование настроек, упомянутых в этой статье: https://dotnet.github.io/orleans/1.5/Documentation/Deployment-and-Operations/Configuration-Guide/Configuring-.NET-Garbage-Collection.html