3

SQL Server 2008 で Entity Framework を使用すると、大量のデータ (1 分あたり 1000 行など) を書き込むアプリケーションができ、それぞれが独自の DBContext.saveChanges 呼び出しに含まれています (それらをまとめてバッチ処理していません)。

問題は、私たちの書き込みが大幅に遅れていることです。物がスラッシングしているように見えるところまで。たとえば、新しい行で saveChanges を 2 分間にわたって数千回呼び出すと、書き込みは 1 回も行われず、突然、いくつかの書き込みが行われます (ただし、多くは完全に失われます)。

SQL トレースを取得したところ、saveChanges 呼び出しの 10% でさえ、SQL が書き込みコマンドを受け取っていないことがわかりました。

そのため、saveChanges と SQL Server の間のどこかに問題があるようです。この呼び出しがどのように機能するのか疑問に思っています。スレッドプーリングを使用していますか? 待ち行列?オーバーランする可能性のあるバッファはありますか? たぶん、書き込み量が原因で静かに失敗するのでしょうか?

MSDNは、これが実際にどのように機能するかを説明するのにほとんど役に立ちません

4

2 に答える 2

2

msdnのパフォーマンスに関する考慮事項を読み、Entity Framework に挿入する最速の方法もご覧ください。

于 2012-07-09T15:08:23.813 に答える
0

内部でどのように機能するかはわかりませんが、この種のオーバーロードでは、データをキューに挿入し、1 つ以上の (ただし制限された) スレッドを使用してキューを空にし、データベースに書き込みます。データが失われないように、スレッドの量をテストおよび調整できます。

于 2012-07-09T14:29:26.653 に答える