Первый запрос медленнее, потому что Entity Framework должен создать представления сопоставления из вашей модели.Это называется "компилирование вашей модели".Это происходит, когда вы выполняете свой первый запрос.
Итак, в вашем эксперименте первый запрос должен быть медленным, даже если он не возвращает никаких записей.
Так что, если вы попробуете что-то вроде этого:
stopWatch = Stopwatch.StartNew();
context.Projects.AsNoTracking().SingleOrDefault(p => p == -1); // record does not exist
stopWatch.Stop();
Debug.WriteLine($"AsNoTracking().SingleOrDefaultAsync, by ID: {stopWatch.ElapsedMilliseconds}");
stopWatch = Stopwatch.StartNew();
context.Projects.AsNoTracking().SingleOrDefault(p => p == -2); // record does not exist
stopWatch.Stop();
Debug.WriteLine($"AsNoTracking().SingleOrDefaultAsync, by ID: {stopWatch.ElapsedMilliseconds}");
Первый запрос будет намного медленнее, чем второй, даже если он не возвращает никаких записей.
Когда вы теперь берете другую сущность из своего контекста (давайте представим, что у вас есть dbset с именем employee в вашем контексте) и выполняетепервый запрос к этому dbset и выполнение запросов к проектам после этого, вы увидите, что запросы проектов будут выполняться намного быстрее.
stopWatch = Stopwatch.StartNew();
context.Employees.AsNoTracking().SingleOrDefault(e => e == -1); // record does not exist
stopWatch.Stop();
Debug.WriteLine($"AsNoTracking().SingleOrDefaultAsync, by ID: {stopWatch.ElapsedMilliseconds}");
stopWatch = Stopwatch.StartNew();
context.Projects.AsNoTracking().SingleOrDefault(p => p == -1); // record does not exist
stopWatch.Stop();
Debug.WriteLine($"AsNoTracking().SingleOrDefaultAsync, by ID: {stopWatch.ElapsedMilliseconds}");
stopWatch = Stopwatch.StartNew();
context.Projects.AsNoTracking().SingleOrDefault(p => p == -2); // record does not exist
stopWatch.Stop();
Debug.WriteLine($"AsNoTracking().SingleOrDefaultAsync, by ID: {stopWatch.ElapsedMilliseconds}");
Один из способов обойти эту проблему - выполнить «фальшивку»."запрос во время запуска, чтобы первый пользовательский запрос не работал медленно