ToListAsync()与ToList()相比非常慢

时间:2015-11-10 12:45:29

标签: asp.net-core-mvc entity-framework-core

我有一个复杂的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;

2 个答案:

答案 0 :(得分:0)

这里的变量太多了。但是,一般来说,异步方法返回的时间比同步方法要长,这只是因为异步具有更多的开销。无论是否考虑到您所看到的整个延迟,至少根据您提供的信息,无法判断。

答案 1 :(得分:0)

this SO answer中所述,如果您使用大列类型(blob,varchar(max)等),则在使用ToListAsync()时使用Entity Framework 6 will perform poorly。我不能说我100%理解这种情况的复杂性,但是只要您正在检索像这样的大数据值,就可以说使用ToList()是正确的。