[英]c# more than 100 results timing out on loop
I have a controller that returns a list of records from a database.我有一个 controller 从数据库返回记录列表。 If I request 100 results it returns within 6-8 seconds.
如果我请求 100 个结果,它会在 6-8 秒内返回。 If I request 500 results it times out .
如果我请求 500 个结果,它会超时。
I have debugged the code and found that the EF Core database query is not the issue, it only takes 10-20ms.我调试了代码,发现EF Core数据库查询不是问题,只需要10-20ms。
There are nearly identical controllers/extensions to this and they all return < 1 sec.对此有几乎相同的控制器/扩展,它们都返回 < 1 秒。 Not sure what is happening here.
不知道这里发生了什么。
Here is the associated code:以下是相关代码:
Controller Endpoint Controller 端点
[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
});
}
Extension method that converts one model to the next将一个 model 转换为下一个的扩展方法
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;
}
}
Auto mapper config自动映射器配置
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntry>()
.IgnoreAllVirtual();
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntryDTO>()
.IgnoreAllVirtual()
.ReverseMap();
cfg.CreateMap<MemberCardQueueEntry, MemberCardQueueEntrySummary>()
.IgnoreAllVirtual();
Have you tried using manual mapper instead of using auto mapper?您是否尝试过使用手动映射器而不是使用自动映射器? so you don't have to carry every parameter in the automapper.
所以你不必携带自动映射器中的每个参数。
At least you can see if there is a problem with the mapper or your objects.至少您可以查看映射器或您的对象是否有问题。
Example :
public MemberCardQueueEntrySummary MapTo(MemberCardQueueEntry entry){
AccountName = entry?.Account?.Name;
DivisionName = entry?.Account?.Division?.Name;
......
}
Find out time of request without autoMapper.找出没有 autoMapper 的请求时间。 Auto mapper works longer where value get null.
在值获得 null 的情况下,自动映射器的工作时间更长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.