У меня есть фоновая работа, которая обрабатывает список элементов.Однако чем больше список, тем больше время его пополнения.Не только это, чем дальше вниз по списку, приложение постепенно съедает оперативную память моего сервера 64 ГБ и замедляет работу сервера для сканирования.
Я использую Hangfire в качестве фонового менеджера заданий, и задание занимает списокid и выполняет над ними несколько действий базы данных.Я обращаюсь к базе данных через ядро ef, используя шаблон репозитория, предоставляемый инфраструктурой aspnetboilerplate.
Я предполагаю, что это медленно из-за растущего контекста БД, поэтому я попробовал вот что:
Разделить список на несколько заданий.
var splitIdList = ListExtensions.ChunkBy(idList, 100);
foreach (var split in splitIdList)
{
await _backgroundJobManager.EnqueueAsync<MyJob, MyJobArgs>(new MyJobArgs(...))
}
Разделить задание на несколько единиц работы
var splitIdList = ListExtensions.ChunkBy(idList, 100);
foreach (var split in splitIdList)
{
using (var uow = UnitOfWorkManager.Begin())
{
foreach(var id in split)
{
//create related entity
....
//create barcode
....
//link entity to created barcode
....
}
uow.Complete();
}
}
Разделите задание на несколько единиц работы с новыми транзакциями
var splitIdList = ListExtensions.ChunkBy(idList, 100);
foreach (var split in splitIdList)
{
using (var uow = UnitOfWorkManager.Begin(System.Transactions.TransactionScopeOption.RequiresNew))
{
foreach(var id in split)
{
//create related entity
....
//create barcode
....
//link entity to created barcode
....
}
uow.Complete();
}
}
Кажется, что ни одна из них не решает проблему, любая помощь будет оценена, спасибо.
РЕДАКТИРОВАТЬ ЗдесьВот что я делаю с каждой сущностью в задании:
- Я создаю другую сущность и связываю их вместе.
- Я создаю qrcode, который является порядковым номером, и связываю его собъект
Операции включают создание, получение, вставку и обновление