私は、あるタイプのメッセージがデータベースに到達し、他のタイプのメッセージが外部のxmlapiに到達する必要があるアプリケーションに取り組んでいます。
多くの処理を行う必要があります...大きな課題の1つは、HttpWebRequestクラスを適切に実行することです。私は最初、標準の同期メソッドを使用し、すべてをスレッドプールすることから始めました。これは良くありませんでした。
したがって、少し読んだ後、これを行うための推奨される方法は、Begin / Endメソッドを使用して作業をIO完了ポートに委任することであることがわかりました。これにより、スレッドプールが解放され、パフォーマンスが向上します。これは当てはまらないようです...パフォーマンスはわずかに向上していますが、スレッドプールと比較して、IO完了ポートがそれほど使用されていることは確かにわかりません。
回転して、利用可能なワーカースレッドとスレッドプール内の完了ポートを送信するスレッドがあります。完了ポートは常に非常に低く(私が見た最大は9が使用されています)、常に約120のワーカースレッド(場合によってはそれ以上)を使用しています。のすべてのメソッドに開始/終了パターンを使用しますhttpwebrequest
:
Begin/EndGetRequestStream
Begin/EndWrite (Stream)
Begin/EndGetResponse
Begin/EndRead (Stream)
私はそれを正しくやっていますか?私は何かが足りないのですか?(netstat出力から)最大2048のhttp接続を同時に使用できます(netstat出力から)-完了ポート番号が非常に少ないのはなぜですか?
誰かがこの管理ワーカースレッド、完了ポートをうまく処理する方法について真剣なアドバイスを与えることができれば、httpwebrequest
それは非常にありがたいです!
編集:.NETはこれに適したツールですか?.NETおよびSystem.Netスタックで動作する大量のhttpconnectionsを取得できますか?WinHttp(または他のC ++ライブラリ)のようなものを使用し、.NETからpInvokeすることをお勧めしますが、これは私が特にやりたいことではありません!