我有一个控制器,它从数据库中返回记录列表。如果我请求100个结果,它将在6-8秒内返回。如果我请求500个结果,就会超时。
我已经调试了代码,并发现EF核心数据库查询不是问题,它只需要10-20ms。
这里有几乎相同的控制器/扩展,它们都返回<1秒。不知道这里发生了什么。
下面是相关代码:
控制器端点
[HttpGet("Summary")]
[AutoQuery]
[ProducesResponseType(200, Type = typeof(CollectionDTO<MemberCardQueueEntrySummary>))]
public async Task<IActionResult> GetSummary()
{
// NOTE: takes 10-20ms
var entries = await memberService.MemberCardQueueEntries().Include(x => x.Account).ThenInclude(x => x.Division).ApplyAutoQuery(HttpContext.Request.Query.ParseQueryString(), out int total).ToListAsync();
// NOTE: takes 6-8 seconds for smaller result sets and times outs for larger
var summaries = entries.ToMemberCardQueueEntrySummaryAsync(mapper);
var results = summaries.ToList();
return Ok(new CollectionDTO<MemberCardQueueEntrySummary>
{
Count = results.Count,
Total = total,
Data = results
});
}扩展方法,它将一个模型转换为下一个
public static class MemberCardQueueEntryExtensions
{
public static IEnumerable<MemberCardQueueEntrySummary> ToMemberCardQueueEntrySummaryAsync(this IEnumerable<MemberCardQueueEntry> entries, IMapper mapper)
{
var result = new List<MemberCardQueueEntrySummary>();
foreach (var x in entries)
{
result.Add(x.ToMemberCardQueueEntrySummaryAsync(mapper));
}
return result;
}
public static MemberCardQueueEntrySummary ToMemberCardQueueEntrySummaryAsync(this MemberCardQueueEntry entry, IMapper mapper)
{
var result = mapper.Map<MemberCardQueueEntrySummary>(entry);
result.AccountName = entry?.Account?.Name;
result.DivisionName = entry?.Account?.Division?.Name;
return result;
}
}自动映射器配置
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntry>()
.IgnoreAllVirtual();
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntryDTO>()
.IgnoreAllVirtual()
.ReverseMap();
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntrySummary>()
.IgnoreAllVirtual();发布于 2020-12-23 18:27:25
你试过使用手动映射器而不是自动映射器吗?所以你不需要携带自动驾驶程序中的所有参数。
至少,您可以看到映射程序或对象是否有问题。
Example :
public MemberCardQueueEntrySummary MapTo(MemberCardQueueEntry entry){
AccountName = entry?.Account?.Name;
DivisionName = entry?.Account?.Division?.Name;
......
}发布于 2020-12-28 06:51:33
找出不需要autoMapper的请求时间。自动映射器在值为null的情况下工作时间更长。
https://stackoverflow.com/questions/65428278
复制相似问题