У меня сложный запрос LINQ с группировкой и несколькими включениями. Я узнал, что ToListAsync() занимает больше секунды для завершения, а ToList() возвращается в доли секунды.Очень медленный ToListAsync() по сравнению с ToList()
allReservationsList = allReservations.ToList(); // fast
allReservationsList = await allReservations.ToListAsync(); // more then a second for 60 rows
Я делаю что-то неправильно или это проблема с сущностью?
Вот запрос:
var reservations = db.Reservations
.Include(r => r.PickUpLocation)
.Include(r => r.ReturnLocation)
.Include(r => r.RequestedVehicleModel).ThenInclude(m => m.Photos)
.Include(r => r.RequestedVehicleModel.VehicleType.VehicleModels)
.Include(r => r.RequestedVehicleType).ThenInclude(t => t.Photos)
.Include(r => r.AssignedUnit.VehicleModel.VehicleType)
.Include(r => r.DailyPrice.Currency);
var allReservations =
from r in reservations
orderby r.VersionDate descending
group r by r.BookingCode into g
select g;
Не могли бы вы предоставить свой запрос и соответствующий код? Единственное, что я могу сказать, это то, что Крис сказал рев. Async всегда будет медленнее для одной операции, чем вызов синхронизации из-за накладных расходов. –
@MaximeRouiller Я добавил запрос. Разница в производительности слишком драматична, чтобы объясняться накладными расходами, вероятно, 100 раз. –
Это почти наверняка из-за таблицы Photos, содержащей столбцы varbinary (max) и/или [n] varchar (max). https://stackoverflow.com/questions/28543293/entity-framework-async-operation-takes-ten-times-as-long-to-complete –