[英]Dependency injection of multiple Entity Framework Core Contexts for running queries in parallel
[英]Parallelization of queries using multiple Entity Framework contexts
考虑一下需要执行和合并数据库中几个隔离查询的结果的情况。 每个单独的查询均基于从其他位置提供的参数。
一种方法是依次执行这些查询并合并结果:
public IEnumerable<SomeEntity> GetSomeEntities(List<int> parameters)
{
var entities = new List<SomeEntity>();
using(var context = new MyContext())
{
entities = parameters.SelectMany(p=> SomeComplexQuery(p);
}
return entities;
}
上述解决方案的问题在于,性能现在与参数列表的大小成正比。 SomeComplexQuery
相对耗费资源。
另一种解决方案是使用并行化:
public IEnumerable<SomeEntity> GetSomeEntities(List<int> parameters)
{
var entities = new List<SomeEntity>();
Parallel.ForEach(parameters, p =>
{
using(var context = new MyContext())
{
entities.AddRange(SomeComplexQuery(p)); // Assume thread-safety
}
};
return entities;
}
当我运行上述解决方案时,可以获得更好的结果,但是我很担心:
并行打开多个上下文会引起什么问题? 如果我们有一个大小为20甚至更大的参数列表怎么办? 系统负载会导致进一步的不良结果吗?
专门针对SQL Azure,由于建立新的数据库连接时增加了延迟,这会被认为是一个坏主意吗?
我正在使用Entity Framework 6,Azure Web角色和SQL Azure。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.