Есть проблема с поиском в этом массиве.
Текущая логика сделана так что в цикле идет вставка по одной сущности определенного типа, но проверяется нет ли сущности с таким же ключом уже в контексте.
_dbContext.Entities.AsNoTracking().Where(a => a.Key == obj.Key);
Key- string
Так вот, проблема начинается в поиске когда уже вставлено больше 500 объектов. Вначале поиск занимает мало времени, а когда уже вставлено порядка 400 объектов, то поиск занимает по 3 секунды.
Пытался использовать представление
Local
но что-то не сильно помогло.
Как можно ускорить поиск не сильно меняя логику?
M>M>_dbContext.Entities.AsNoTracking().Where(a => a.Key == obj.Key);
M>
Есть мнение, что здесь не в db-контексте поиск происходит, а каждый раз выполняется полноценный запрос в БД.
Чтобы искало сначала в контексте — есть метод Find.
Если нужно искать только в контексте без похода в БД, можно написать свой extension, который будет смотреть в change tracker. Либо трекать дубликаты через отдельный HashSet.
Если же нужна максимальная производительность — то убери ef core. Заливай через bulk insert во временную stage таблицу и затем, обединяй с основной через merge.