【发布时间】:2019-03-05 17:29:36
【问题描述】:
我正在使用带有 EF 6 和 LINQ 的 SQL Server 数据库。
例如,我在一个页面上有 10 个下拉列表。我需要从数据库中获取这些下拉列表。
我需要同时做 10 个不同的请求,这需要很多时间。在我的情况下,每个请求大约需要 0,05ec。 10 个请求 * 0,05 = 0,5 秒。很长。
如何以其他方式提出这些请求以提高性能?
请求示例
var marriageStatuses = await db.MarriageStatus
.AsNoTracking()
.Select(x => new
{
Id = x.Id,
Description = x.Description
})
.ToListAsync();
表格示例:
【问题讨论】:
-
创建一个任务列表并同时运行它们,它们将在不同的线程上运行
-
如果它们不相互依赖,您可以并行异步调用它们。只需捕获任务并使用
Task.WhenAll等待它们全部完成。此外,如果数据库数据不经常更改,您可能需要添加缓存。 -
任务 task1 = context.Languages.ToListAsync();任务 task2 = context.MarriageStatus.ToListAsync();等待 Task.WhenAll(task1, task2);我尝试了这个,但出现异常 - 在前一个异步操作完成之前,在此上下文上开始了第二个操作。使用 'await' 确保在此上下文中调用另一个方法之前所有异步操作都已完成。不保证任何实例成员都是线程安全的。
标签: c# sql-server asp.net-mvc entity-framework asp.net-web-api