← На главную

EF Core 11 preview 3 ускорил AsSplitQuery на 9% и сэкономил 10% памяти

04.07.2026 12:57 · hackernews

EF Core 11 (начиная с preview 3) сделал AsSplitQuery заметно быстрее. Раньше, если ты подгружал несколько связанных сущностей через Include, а потом вызывал AsSplitQuery, EF Core выполнял запрос для корневой таблицы и по одному запросу на каждую коллекцию. Но каждый такой запрос тащил все reference navigation — даже те, что не нужны для связывания коллекции. Например, запрос на Posts (коллекция) всё равно джойнил таблицу BlogType (reference), выбирал её Id и сортировал по нему. Чем больше reference Include, тем больше лишних JOIN и ORDER BY в каждом запросе коллекции. База делала лишнюю работу и выбрасывала результат.

В EF Core 11 эти reference navigation из запросов коллекций вырезали. Теперь запрос для Posts выглядит так, как написал бы руками: просто INNER JOIN Post с блогом по первичному ключу. Без лишних LEFT JOIN с BlogType и прочих.

Автор сравнил производительность на схожем бенчмарке. Тестовые данные: 5000 блогов, у каждого 5 постов, плюс четыре reference navigation (Author, Category, Series, Posts). Замеряли на .NET 10 и .NET 11 (с соответствующими версиями EF Core). Результаты: на .NET 10 запрос в среднем занимал 68.53 ms и выделял 33.35 MB памяти. На .NET 11 — 62.07 ms и 30.15 MB. Время сократилось примерно на 9%, память — почти на 10%. Автор оговаривается, что часть улучшений может приходиться на саму платформу .NET 11, а не только на EF Core, но общая тенденция очевидна.

Итог: если в проекте есть AsSplitQuery и много Include с reference navigation, статью стоит прочитать — апдейт может дать бесплатный прирост скорости и снижение аллокаций.

Читать оригинал →