4

バックグラウンド

Microsoft CRM 2011に接続し、何万ものレコードを更新するサービスがあります。シングルスレッドで実行すると、開発環境で1分間に更新されるレコードはわずか30件になります。TPL Parallel.Inovkeを使用してマルチスレッドに切り替えましたが、CRMへの接続はスレッドセーフではないため、処理しているレコードごとに新しい接続を作成していました。この変更により、スループットが1分あたり60レコードに増加しただけです。次に、戻ってレコードをまとめてバッチ処理したので、各スレッドは1つの接続を開き、一度に1000レコードを処理します。これにより、スループットが1分あたり約500回に増加しました。このパスを続行して、スレッドの数でバッチのサイズを微調整することもできますが、実際の解決策は、ある種の接続プールを実行することであるため、すべてのスレッドにそれがあります。

接続プールを実行する方法は?

TPLは、終了しているアクションから処理される次のアクションにオブジェクトを渡す方法を提供しますか?そうでない場合は、独自の接続プールクラスを作成する方法の良い例がどこかにありますか?

4

1 に答える 1

3

TPLにはこのようなものはないと思います。接続プールを提供するのは、その仕事ではありません。

ただし、これを行う1つの方法は、スレッドローカル初期化をサポートするのオーバーロードの1つを使用することです。Parallel.ForEach()

于 2012-05-03T13:31:22.907 に答える