.net core项目目前代码1在正常运行,想优化,改为不要返回值(代码2)是不是更稳定更快或有其它的好方案优化?
public List<BSubject> BSubjectList {get; set; }
public async Task<List<BSubject>> BSDetails(Guid id)
{
BSubjectList= await DC.Set<BSubject>().Where(e => e.BId == id)
.Include(e => e.PAnswers).ThenInclude(a => a.EAnswer).OrderBy(e => e.SType).ThenBy(e => e.EPBSNO).AsNoTracking().ToListAsync();
return BSubjectList;
}
public async Task<ActionResult> EExamAsync()
{
//...省略...vm.Entity.ID逻辑获取到ID使用
await BSDetails(vm.Entity.ID);
return PartialView(vm);
}
代码1 以上BSDetails 是有返回值的,直接赋值BSubjectlist,没有必要再返回值
现在我想优化为代码2
public List<BSubject> BSubjectList {get; set; }
public void BSDetails(Guid id)
{
BSubjectList= DC.Set<BSubject>().Where(e => e.BId == id)
.Include(e => e.PAnswers).ThenInclude(a => a.EAnswer).OrderBy(e => e.SType).ThenBy(e => e.EPBSNO).AsNoTracking().ToList();
}
public async Task<ActionResult> EExamAsync()
{
//...省略...vm.Entity.ID逻辑获取到ID使用
BSDetails(vm.Entity.ID);
return PartialView(vm);
}
这样优化VOID使用,系统又没有使用异步,是不是性能稳定性还不如之前的代码1,请专家高手帮忙分析指导一下,谢谢
回答
理论上 同步比异步的性能可能要高那么几ns. 但是同步带来的资源利用率要比异步低不少.
假设在web环境中, 大量调用BSDetails 这个方法. 异步将获得比同步好得多的TPS.
原因: 像这种数据库查询, 系统绝大部分时间都是在IO等待. 所以异步比同步有优势的多.