この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 16497|答える: 5

[出典] .NET/C# HttpWebRequest の穴を使ったマルチスレッド同時実行

[リンクをコピー]
2021年12月20日 15:21:04に投稿 | | | |
タスクスケジューリングを行う際、スケジューリングのタスクはHTTPリクエストの開始をシミュレートすることですが、タスクが増えると、タスクスケジューリングがまるで偽の死のように感じられます。

通常のWindowsシステムでの最大要求接続数は2回ですが、サーバーOSではデフォルトで10回です。 この並行接続制限を変更しなければ、すると、クライアントが同時にできるhttp接続の数は2か10だけです

System.Net.ServicePointManager.DefaultConnectionLimit これは、下図に示されているように、現在のデフォルト設定を取得できる最大接続数です:



HttpClientにはデフォルトの並行性制限がありますか?

.Net 4.0以前は、Http操作はHttpWebRequestに依存していました。 同じサイトに対してデフォルトで最大2回の同時実行制限が非常に保守的で、これがHttpWebRequestの理想的な速度をデフォルトで得られない原因になることが多いです(この戦略は多くのコーダーを苛立たせているようです)。また、App.configやServicePointManager.DefaultConnectionLimitの値も修正する必要があります。

MSは.Net 4.5でHttp操作を処理するHttpClientクラスを導入し、HttpClientとHttpWebRequestは同じポリシーに従っていると思っていました。 今日、マルチスレッドのダウンロードプログラムを書いているときに10の同時接続を使ったところ、HttpClientにはデフォルトで並行数の制限がないことがわかりました。

最初はそう思いました。 Net 4.5ではこの並行制限が撤廃されました(結局のところ、今では誰もこの基準に従っていません)。その後、WebRequestで該当するコードを書き直したところ、同時実行制限は依然として2で、ServicePointManager.DefaultConnectionLimitの値も2であることがわかりました。 つまり、HttpClientはHttpWebRequestの並行性ポリシーによって制御されておらず、システムレベルの並行性制限はありません。

さらに、テスト中にHttpWebRequestはすべてのアドレスで最大2回の同時実行をデフォルトで設定していないことがわかりました。 例えばローカルHTTPアドレス接続(http://localhost/*)には並行性の上限はありません。

C#マルチスレッド環境がHttpWebRequestの同時接続制限を呼び出す

.netのHttpWebRequestまたはWebClientはマルチスレッドの場合、並行接続の上限があり、Windows XPやWindows 7などのデスクトップOSではデフォルトで2、サーバーOSではデフォルトで10です。 この同時接続の制限を変更しなければ、クライアントが一度にできるHTTP接続の数は2回か10回だけです。 ブラウザやスパイダーのような一部のアプリケーションでは、2回や10回の同時実行が少なすぎるため、アプリケーションのパフォーマンスに大きな影響を与えます。 この同時接続の制限は、HTTP 1.0およびHTTP 1.1標準で最大2接続までを定めているためです。 しかし、主流のブラウザはもはやこのルールを守っていませんが、.NETフレームワークはデフォルトでこのルールに従っています。

多くの記事では非同期アクセスでHttpWebRequestのパフォーマンスが向上すると言われていますが、私がテストしたところ、同時接続のデフォルト数を変えなければ、同期または非同期アクセスのパフォーマンスは良くありません。

また、app.configで同時接続の最大数を以下のように設定することもできます:

参考文献

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。





先の:Xshell Xftp このプログラムを継続するには、最新の...
次に:Mavenコマンドはサードパーティ製jarパッケージをNexusのプライベートリポジトリにプッシュします
2021年12月26日 17:20:57に投稿 |
学ぶことを学びましょう。。。。。
2022年1月10日 08:42:47に投稿 |
学ぶことを学びましょう。。。。。
2022年3月8日 15:58:54に投稿 |
学ぶ。。。
 地主| 2023年2月18日 21:47:09 に投稿 |
 地主| 2023年3月10日 21:21:15に投稿 |
web.configで設定してください

免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com