Я новичок в использовании ORM для работы с базами данных. В настоящее время я делаю новый проект, и мне нужно решить, буду ли я использовать Entity Framework или Dapper. Я прочитал много статей, в которых говорится, что Dapper быстрее Entity Framework.
Итак, я сделал 2 простых проекта-прототипа, один из которых использует Dapper, а другой использует Entity Framework с одной функцией, чтобы получить все строки из одной таблицы. Схема таблицы как на следующем рисунке
и код для обоих проектов, как показано ниже
для Dapper проекта
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
IEnumerable<Emp> emplist = cn.Query<Emp>(@"Select * From Employees");
sw.Stop();
MessageBox.Show(sw.ElapsedMilliseconds.ToString());
для Entity Framework Project
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
IEnumerable<Employee> emplist = hrctx.Employees.ToList();
sw.Stop();
MessageBox.Show(sw.ElapsedMilliseconds.ToString());
после многократной попытки вышеприведенного кода только при первом запуске проекта, более щадящий код будет быстрее, и после этого первого раза всегда я получаю лучшие результаты из проекта Entity Framework. Я также попробовал следующее утверждение в проекте Entity Framework, чтобы остановить ленивый погрузка
hrctx.Configuration.LazyLoadingEnabled = false;
но тот же EF работает быстрее, за исключением первого раза.
Может ли кто-нибудь дать мне объяснение или руководство о том, что делает EF быстрее в этом примере, хотя все статьи в Интернете говорят об обратном
Обновить
Я изменил строку кода в образце сущности, чтобы
IEnumerable<Employee> emplist = hrctx.Employees.AsNoTracking().ToList();
использование AsNoTracking, как упоминалось в некоторых статьях, останавливает кеширование структуры сущностей, и после остановки кеширования более щадящий образец работает лучше (но не очень большая разница)