2011-12-20 13 views
2

UIでサービス(WCF)レイヤを呼び出し、サービスレイヤ内にあるコンポーネントが外部Webサービスを非同期に呼び出すアプリケーションを開発しています。たとえば、UIの送信ではファイルをアップロードしてWCFレイヤーを呼び出し、ファイルに1000のエントリがある場合、現在はループ(BeginxxxMethod)で外部サービスを非同期的に1000回呼び出して応答します。これは正しい方法ですか? 2番目の質問:作成できる非同期接続の最大数はいくらですか?私たちの技術はASP.NEtとC#4.0です。Asynchronus Webservicesスレッド制限C#

答えて

1

つの提案:あなたはWebサービスAPIをコントロールしている場合

  • あなたはすべて1000個の引数と戻り、すべての結果を渡すことができます別の方法を追加します。これはchunky vs chattyなので、あなたは一度だけクロスプロセスの痛みを経験します。
  • WebサービスAPIを制御しない場合は、n回のリモート呼び出しを同期させるラッパーを用意し、このラッパーをn回非同期に呼び出します。非同期呼び出しごとの連続したリモート呼び出しの数と非同期呼び出しの数の最適なバランスが見つかるまでお試しください。
+0

我々は10で最大スレッドを制御するTPLとPLINQを実装することにより、実装を制御し... – Saravanan

1

これは正しい方法ですか?

多くの場合、大量のバッチジョブを実行するための非同期呼び出しが最適な方法です。私はあなたがこのアプローチでよく見ていると思います。開発者としては、新しいスレッドをカットすることで応答時間が最適化されなくなった場所を確認することは、しばしば私たちの仕事です。 Mylesはサービスのラッパーを使用して言及しました。私はしばしば1000の呼び出しを呼び出すときにこれをやったことがあります...数千の非同期呼び出しを呼び出すと実際に(アプリケーションで)パフォーマンスが低下するので、呼び出しを数百(非同期的に)グループ化する機能を作成しました。 - 千々の呼び出しが終了しました。これは私に両方の世界のベストを与えました...私は非同期コールのポイント番号が一度に私に最高のパフォーマンスを与え、そこから行ったことが分かりました。

限り最大スレッドとして、それはリソースによって異なりますが、ここではデフォルトを説明するlinkです...私たちはタスク並列ライブラリを実装することでこれを解決してきやす

1023 in Framework 4.0 (32-bit environment) 
32768 in Framework 4.0 (64-bit environment) 
250 per core in Framework 3.5 
25 per core in Framework 2.0 
0

については下記を投稿します。 以下は擬似コードです。

  1. 一般的なリストにファイルの内容を読み込みます。
  2. Parallelを使用すると、各要求を処理し、要求を処理するサーバーのプロセッサ数に応じてMaxDOP(並列度)を設定します。

おかげ