#c# #entity-framework #performance-testing
#c# #entity-framework #тестирование производительности
Вопрос:
Я пытаюсь измерить производительность с помощью Stowpatch
класса, включая операции с базой данных, но, насколько я понимаю, производительность EF также зависит от состояний холодного и теплого выполнения.
Я хотел бы отметить в журнале производительности, что определенный вывод является результатом того, в каком состоянии EF находился в то время.
Есть ли событие жизненного цикла, к которому я мог бы подключиться или что-то в этом роде?
Ответ №1:
Я надеюсь, что entity framework profiler — это тот инструмент, который вам нужен.
Комментарии:
1. Вероятно, нет, потому что я не понимаю, как это будет вписываться в существующую настройку профилирования. И меня больше интересует ответ на мой вопрос. Плюс это стоит денег.
Ответ №2:
Нет события жизненного цикла или чего-либо, к чему вы могли бы подключиться, чтобы определить холодное или теплое выполнение запроса. Согласно соображениям производительности для Entity Framework 4, 5 и 6:
В самый первый раз, когда какой-либо запрос выполняется к данной модели, Entity Framework выполняет большую работу за кулисами для загрузки и проверки модели. Мы часто называем этот первый запрос «холодным» запросом. Дальнейшие запросы к уже загруженной модели известны как «теплые» запросы и выполняются намного быстрее.
Итак, если вы хотите измерить производительность при холодных и теплых запросах, выполните свои запросы дважды и используйте System.Diagnostics.Stopwatch
для определения времени, прошедшего для первого и последующего выполнения ваших запросов.
Первое выполнение запроса — холодный запрос
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
using(var db = new MyContext())
{
var q1 = from c in db.Customers where c.Id == 1 select c;
var c1 = q1.First();
}
stopWatch.Stop();
TimeSpan coldts = stopWatch.Elapsed;
Второе выполнение запроса — теплый запрос
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
using(var db = new MyContext())
{
var q1 = from c in db.Customers where c.Id == 1 select c;
var c1 = q1.First();
}
stopWatch.Stop();
TimeSpan warmts = stopWatch.Elapsed;