我有一个复杂的LINQ查询,包含分组和多个包含。我发现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;
答案 0 :(得分:0)
这里的变量太多了。但是,一般来说,异步方法返回的时间比同步方法要长,这只是因为异步具有更多的开销。无论是否考虑到您所看到的整个延迟,至少根据您提供的信息,无法判断。
答案 1 :(得分:0)
如this SO answer中所述,如果您使用大列类型(blob,varchar(max)
等),则在使用ToListAsync()
时使用Entity Framework 6 will perform poorly。我不能说我100%理解这种情况的复杂性,但是只要您正在检索像这样的大数据值,就可以说使用ToList()
是正确的。