エンティティフレームワーク接続を使用してMyTblという名前のテーブルからXML文字列のリストを抽出するIDListという整数のリストがあります。 XML文字列は、他のタスクを実行するために使用されます。次のうちどれが良いでしょうか?ループ内のエンティティフレームワーク接続
方法1
var IDsList = new List<Int32>() {17, 23, 47, 62, 63, 79, 85, 91, 100}; // user input
List<String> XMLStrs = null;
using (var ctx = new DatabaseEntities()) {
XMLStrs = IDsList.Select (i => Ctx.MyTbl.First (tr => tr.id == i).xml_str).ToList();
}
XMLStrs.AsParallel().ForAll (xs => {
// Do something in parallel
});
方法2
var IDsList = new List<Int32>() {17, 23, 47, 62, 63, 79, 85, 91, 100}; // user input
IDsList.AsParallel().ForAll (i => {
using (var ctx = new DatabaseEntities()) {
var xs = ctx.MyTTbl.First (tr => tr.id == i).xml_str;
// Do something with xs
}
});
以上の慣用のC#で異なる方法がありますか?
注意してください。IDsListは一般的に、はるかに長いリストです。長さは数千になることが多いです。また、xsの特定の値に対する個別の実行は、他のものとほぼ同じ時間がかかります。あなたはEF 4.1で、IDsListに存在するIDを持つ行を取得しようとしている場合は
メソッド#2は非常に大量のデータベース接続を作成し、本質的にDOSフィルタをいくつかのネットワークで起動する可能性があります。 – doogle