Слайд 2Всегда используйте профайлер !
Позволяет обнаружить проблемные места на ранней стадии
Неоптимальный запрос (нужно
![Всегда используйте профайлер ! Позволяет обнаружить проблемные места на ранней стадии Неоптимальный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-1.jpg)
посмотреть execution plan)
Повторные вызовы одного и того же запроса
Неправильное использование Lazy Loading
т.д.
Слайд 3Использование SaveChanges
Стараемся вызывать один раз *
Unit Of Work паттерн
* не железное правило,
![Использование SaveChanges Стараемся вызывать один раз * Unit Of Work паттерн *](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-2.jpg)
каждый раз думаем
Слайд 4Bulk Operations – боль EF
Сторонние библиотки (платные)
Stored procs
Raw SQL
SqlBulkCopy
Add vs AddRange
AutoDetectChangesEnabled
![Bulk Operations – боль EF Сторонние библиотки (платные) Stored procs Raw SQL](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-3.jpg)
Слайд 7Lazy Loading – Проблема N+1 запросов
- Include
- Перестроить запрос
LINQ: отложенное выполнение
![Lazy Loading – Проблема N+1 запросов - Include - Перестроить запрос LINQ:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-6.jpg)
(не связано с EF изучить самостоятельно)
Слайд 8Быстрое чтение
AsNoTracking
var blogs = context.Blogs.AsNoTracking().ToList();
![Быстрое чтение AsNoTracking var blogs = context.Blogs.AsNoTracking().ToList();](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-7.jpg)
Слайд 9Проекции
Загружаем из базы только те поля, которые нам нужны
- Широкая таблица
- Неочевидный
![Проекции Загружаем из базы только те поля, которые нам нужны - Широкая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-8.jpg)
пример (join)
Слайд 10IQueryable vs IEnumerable
Различия
IEnumerable doesn’t support lazy loading
IQueryable support lazy loading
Querying data
![IQueryable vs IEnumerable Различия IEnumerable doesn’t support lazy loading IQueryable support lazy](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/927124/slide-9.jpg)
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.