Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何优化对数据库的许多不同请求?_C#_Sql Server_Asp.net Mvc_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 如何优化对数据库的许多不同请求?

C# 如何优化对数据库的许多不同请求?,c#,sql-server,asp.net-mvc,entity-framework,asp.net-web-api,C#,Sql Server,Asp.net Mvc,Entity Framework,Asp.net Web Api,我正在使用一个带有EF 6和LINQ的SQL Server数据库 例如,我在一个页面上有10个下拉列表。我需要从数据库中获取这些下拉列表 我需要同时做10个不同的请求,这需要很多时间。在我的情况下,每个请求大约需要0,05 EC。10请求*0,05=0,5秒。很长 如何以其他方式提出这些请求以提高性能 请求示例 var marriageStatuses = await db.MarriageStatus .AsNoTracking()

我正在使用一个带有EF 6和LINQ的SQL Server数据库

例如,我在一个页面上有10个下拉列表。我需要从数据库中获取这些下拉列表

我需要同时做10个不同的请求,这需要很多时间。在我的情况下,每个请求大约需要0,05 EC。10请求*0,05=0,5秒。很长

如何以其他方式提出这些请求以提高性能

请求示例

var marriageStatuses = await db.MarriageStatus
                               .AsNoTracking()
                               .Select(x => new
                                            {
                                                Id = x.Id,
                                                Description = x.Description
                                            })
                               .ToListAsync();
表格示例:


有一些简单的通用技术可以处理如下问题:

通过将所有n+1查询组合为一个查询来避免所有n+1查询 在提取冗余数据的位置合并任何其他查询 延迟加载具有后续服务器请求的组件,以便页面首先加载
如果您有更多的详细信息,如查询的表和列,我可能能够更具体地回答。

创建任务列表并同时运行它们,它们将运行在不同的线程上。如果它们彼此不依赖,您可以异步并行调用它们。只需捕获任务并使用Task.whell等待它们全部完成。此外,如果数据库数据不经常更改,您可能需要添加缓存;任务task2=context.MarriageStatus.ToListAsync;等待任务。当任务1,任务2;我尝试了这一点,但出现了异常-在前一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在此上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全。我在示例中添加了两个简单的表。考虑到这些表看起来有多短,我不明白为什么会出现性能问题。0.05ms*10=0.5ms=0.0005秒?打开到DB的连接-我认为这就是为什么需要花费大量时间的原因,无论是10条记录还是100条记录。就我而言,大约需要50毫秒!!对于每个请求。如果您的问题是数据库的延迟,那么您只能通过专注于此来解决它。通过本地缓存数据或寻址网络连接。幸运的是,使用EF6,您仍然可以通过db上下文访问DbReader,并在单个查询中检索多个结果集。