0

dapper rainbow database.cs 拡張機能を使用しています。

private void insertList(IEnumerable<myObject> list)
    {
          using (SqlConnection conn = new SqlConnection(connectionString))
        {
            var db = myDB.Init(conn, commandTimeout: 100);
            db.myTable.tableName = "ds.myTable";
            Parallel.ForEach(dsList, a => db.myTableInsert(a)
                        );
            db.Dispose();
        }
    }

これは機能しません。Parallel.ForEach 内で接続を開いたり閉じたりする必要があると思います。それはそれを行うための書き込み方法ですか?

私はこの拡張機能を使用したかったのですが、非常に便利で便利ですが、リストを挿入するというこの問題がありました。この拡張機能の使用とリストの使用について、オンラインで何も見つかりませんでした。

4

1 に答える 1

2

通常、データベース接続はスレッドセーフではないため、同じ接続で並列に挿入を行うと、問題が発生する可能性があります。

したがって、はい、内で接続を開いたり閉じたりする必要があると思いますParallel.ForEach()。それをベンチマークすることもできます。複数のデータベース接続でそのように並行して挿入を行う方が、単一の接続で通常のループで行うよりも高速であるとは完全には確信していません。

于 2013-12-11T19:24:33.757 に答える