Опубликовано наше исследование производительности Dapper и EF Core
Недавно мы опубликовали статью с результатами сравнительных тестов Dapper и Entity Framework Core в сценариях доступа к данным в .NET.
Вместе с Азатом @dudefromwest хотели понять где разница в производительности становится действительно заметной.
Для этого мы провели серию тестов с использованием .NET, PostgreSQL и BenchmarkDotNet - от простых сценариев чтения до запросов с частыми JOIN, обновлений и параллельных выборок.
Основной вывод был ожидаемым, но все же важным - Dapper обычно выделял меньше памяти и демонстрировал меньшую среднюю задержку.
В простых сценариях чтения разница была заметна, но не критична.
Но в запросах с частыми JOIN и сложных обновлениях разрыв стал гораздо более существенным. В одном из сценариев JOIN Dapper показал улучшение времени выполнения примерно на 51%, а в сложном сценарии обновления - примерно на 48%.
Компилированные запросы EF Core помогли в некоторых сценариях чтения, но существенно не изменили профиль выделения памяти.
И это логично - компиляция запросов решает лишь часть проблемы. Материализация объектов, управление состоянием и отслеживание изменений по-прежнему остаются важными факторами.
Еще один интересный момент - в ходе исследования Азат проанализировал исходный код Dapper и открыл issue в репозитории Dapper'a после обнаружения избыточной операции преобразования в nullable в асинхронном пути запроса
Ссылка на научную работу Исходники проекта и бенчмарки PS Мне периодически пишут на счет личного менторства, к сожалению, я его не провожу. Но смело могу рекомендовать Азата @dudefromwest как сильного дотнетчика, мы с ним коллеги с 2021 года, плюс он уже имеет опыт менторства