0

SubSonics AddMany() メソッドが単純な foreach ループよりも高速かどうかを調べようとしています。SubSonic のサイトを少し調べてみましたが、パフォーマンス統計についてはあまりわかりませんでした。

私が現在持っているもの。(.ForEach() は、 forEach(.....){ do stuff} と同じように機能することを除いて、いくつかの検証を行うだけです)

records.ForEach(record =>
            {
                newRepository.Add(record);
                recordsProcessed++;
                if (cleanUp) oldRepository.Delete<T>(record);
            });

どっちも変わる

newRepository.AddMany(records);
if (cleanUp) oldRepository.DeleteMany<T>(records);    

この方法で気付いた場合、処理したレコードの数が失われますが、これは重要ではありません... しかし、このツールで移動されたレコードの数をユーザーに表示できると便利です。

したがって、私の質問は次のようになります: AddMany() を使用すると著しく高速になりますか? 実際にコピーされたレコード数を取得する方法はありますか? 成功した場合、すべてのレコードが処理されたと想定できますか? 1 つのレコードが失敗した場合、プロセス全体が失敗しますか?

前もって感謝します。

4

1 に答える 1

0

明確にするために、 AddMany() は行ごとに個々のクエリを生成し、バッチを介して送信します。DeleteMany() は単一のクエリを生成します。クエリがどうなるか知りたい場合は、ソース コードと生成された SQL を参照してください。

最初のアプローチは遅いです: 2*N クエリです。ただし、バッチを使用してクエリを送信すると、より高速になります。

2 番目のアプローチの方が高速です: N+1 クエリです。「レコード」を列挙するだけで、追加される数を確認できます。

バッチのサイズが容量制限を超えるリスクがある場合は、一度に 50 個または 100 個を提出してください。ペナルティはほとんどありません。

最後の質問は取引によって異なります。操作全体が 1 つのトランザクションである場合、1 つのトランザクションとしてアボートのコミットが行われます。それ以外の場合、各クエリは独立しています。あなたの選択。

于 2012-02-04T00:17:27.603 に答える