Пул контекстов и скомпилированные запросы
Вопрос
Профилирование горячего эндпоинта показало заметное время на создание DbContext и перевод LINQ в SQL. Какие механизмы EF Core это сокращают?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
AsNoTrackingиIncludeдля всех запросов эндпоинтаAddDbContextPoolиEF.CompileAsyncQueryдля запросаправильный ответ- Ленивая загрузка через прокси вместо явной загрузки
EnsureCreatedпри старте, чтобы прогреть модель
Разбор
Пул контекстов сбрасывает и переиспользует экземпляры вместо создания новых (но контекст не должен хранить своё состояние в полях). Скомпилированный запрос избавляет от повторного разбора дерева выражений, хотя EF и так кеширует планы для одинаковых запросов, и выигрыш виден на очень горячих путях. AsNoTracking экономит на отслеживании, а не на создании контекста и трансляции. Ленивая загрузка добавляет запросы. EnsureCreated вообще про создание схемы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.