3

他の誰かのコードを編集していて、for ループと InsertOnSubmit を使用しているときに、submitchanges 呼び出しがループの内側または外側にあるかどうか疑問に思っています。

いいえ:

foreach (string t in newTags)
{
   Tag q_tag = new Q_Tag();
   q_tag.Q_ID = updated.Q_ID;
   q_tag.Tag_Name = t;
   TheData.Q_Tags.InsertOnSubmit(q_tag);
   TheData.SubmitChanges();         
}

とは対照的に:

foreach (string t in newTags)
{
   Tag q_tag = new Q_Tag();
   q_tag.Q_ID = updated.Q_ID;
   q_tag.Tag_Name = t;
   TheData.Q_Tags.InsertOnSubmit(q_tag);     
}

TheData.SubmitChanges();
4

3 に答える 3

2

データベースへの新しい接続が開かれ、最初の関数呼び出しの最後で閉じられます。2 番目のコードでは、単一の接続が開かれ、すべての操作の後に閉じられます。2 番目のものは、最初のものよりもはるかに高速です。後で自分で試すこともできますが、私のテストでは 30% 近くの速度変化が見られました。

于 2013-05-23T17:53:10.467 に答える
0

どちらの方法でも構いません。MSDN からこの短い記事を読んでください http://msdn.microsoft.com/en-us/library/bb399378.aspxおそらくループの外で実行する必要があるため、一度だけ実行します。これにより、最高のパフォーマンスが得られるはずです。

于 2013-05-23T17:51:21.773 に答える
0

ループの外側と言えます。DataContext.SubmitChanges MSDN エントリから:

挿入、更新、または削除する変更済みオブジェクトのセットを計算し、適切なコマンドを実行してデータベースへの変更を実装します。

そのことを念頭に置いて、メソッドは 1 回の呼び出しですべてのオブジェクトを挿入するため、ループの外で実行する方が効率的です。

于 2013-05-23T17:51:29.743 に答える