Подтвердить что ты не робот

AsNoTracking() в сущности

Я использую AsNoTracking() и знаю, что кеширование первого уровня отключается при его использовании. Но как можно использовать AsNoTracking() улучшить производительность? В чем преимущество его использования?

4b9b3361

Ответ 1

AsNoTracking() означает, что объекты не будут кэшироваться локально экземпляром ObjectContext. Это имеет несколько практических преимуществ:

  • Использование памяти. Поскольку ObjectContext не ссылается на объекты после их возврата, сборщик мусора может избавиться от них, как только вы перестанете ссылаться их. Как правило, ObjectContext должен быть удален до того, как это произойдет.

  • Производительность. Поскольку EF не нужно пытаться сопоставить каждую запись, полученную из базы данных с локальным объектом на карте идентификации, ваши запросы могут выполняться несколько быстрее.

  • Валюта: поскольку запросы возвращают объекты, материализованные непосредственно из результатов базы данных, и не полагаются на локальный кеш, возвращаемые объекты всегда должны отражать последние значения в базе данных.

  • Безгражданство. Поскольку объекты не отслеживаются ObjectContext, вы можете продолжать использовать один и тот же экземпляр объекта ObjectContext неограниченно для запросов только для чтения и не должны испытывать ограничений со стороны обычных советов относительно имеющих короткоживущие объекты ObjectContexts.

AsNoTracking() - хорошая идея, если вы только запрашиваете сущности. Это не сработает, если вам нужно их обновить, то есть компромисс.