Слайд 2Всегда используйте профайлер !
Позволяет обнаружить проблемные места на ранней стадии
Неоптимальный запрос (нужно
посмотреть execution plan)
Повторные вызовы одного и того же запроса
Неправильное использование Lazy Loading
т.д.
Слайд 3Использование SaveChanges
Стараемся вызывать один раз *
Unit Of Work паттерн
* не железное правило,
каждый раз думаем
Слайд 4Bulk Operations – боль EF
Сторонние библиотки (платные)
Stored procs
Raw SQL
SqlBulkCopy
Add vs AddRange
AutoDetectChangesEnabled
Слайд 7Lazy Loading – Проблема N+1 запросов
- Include
- Перестроить запрос
LINQ: отложенное выполнение
(не связано с EF изучить самостоятельно)
Слайд 8Быстрое чтение
AsNoTracking
var blogs = context.Blogs.AsNoTracking().ToList();
Слайд 9Проекции
Загружаем из базы только те поля, которые нам нужны
- Широкая таблица
- Неочевидный
пример (join)
Слайд 10IQueryable vs IEnumerable
Различия
IEnumerable doesn’t support lazy loading
IQueryable support lazy loading
Querying data
from a database, IEnumerable execute a select query on the server side, load data in-memory on a client-side and then filter data.
Querying data from a database, IQueryable execute the select query on the server side with all filters.