EF が作成している非常に大きなクエリがいくつかあるため、応答時間が遅くなり、CPU 使用率が高くなるため、最適化する方法として、MARS と非同期の並列クエリを実装して、複数のより単純な結果セットを並行して操作してプルバックしようと考えました。記憶に。
つまり、私はこれをしたいと思います:
public async Task<IEnumerable<TResult>> GetResult<TResult>()
{
using(var context = new Context())
{
return await context.Set<TResult1>().ToListAsync().ConfigureAwait(false);
}
}
IEnumerable<TResult1> result1;
IEnumerable<TResult2> result2;
var result1Task = GetResult<TResult1>();
var result2Task = GetResult<TResult2>();
await Task.WhenAll(result1Task, result2Task).ConfigureAwait(false);
var result1 = result1Task.Result;
var result2 = result2Task.Result;
DBContext
ただし、タスクごとに新しい接続を作成するため、これが接続プールを利用するかどうかはわかりません。
この記事を見つけましたが、Entity Framework を使用していません。
Core を使用してこれを見つけましたが、推奨される戦略ではありませんでした。
これは.NETフレームワーク用のEntity Frameworkを使用していますが、例としてストアドプロシージャを使用していますが、SPを呼び出すのではなく、3つの読み取りクエリを並行して発行したいだけです。
理想的には、linq を使用して (select Id, VendorName From Vendors....
文字列を使用するのではなく) SQL を生成するために複数の結果セットを達成し、文字列を使用せずに結果をクラスに自動マッピングする方法を探しています ( vendorID = (int)vendorReader["BusinessEntityID"];
)。
これは可能ですか、それとも夢物語ですか?