![](/img/trans.png)
[英]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.