Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 16497|Antwort: 5

[Quelle] .NET/C# Multithreaded-Nebenwahl unter Verwendung der Grube von HttpWebRequest

[Link kopieren]
Veröffentlicht am 20.12.2021, 15:21:04 | | | |
Beim Task-Scheduling besteht die Aufgabe darin, das Initiieren einer HTTP-Anfrage zu simulieren und festzustellen, dass bei mehr Aufgaben die Task-Scheduling wie ein Fake Death wirkt.

Die maximale Standardanzahl der angeforderten Verbindungen auf einem normalen Windows-System beträgt 2, und auf einem Server-Betriebssystem liegt sie standardmäßig auf 10. Wenn du diese gleichzeitige Verbindungsgrenze nicht änderst,Dann beträgt die Anzahl der HTTP-Verbindungen, die der Client gleichzeitig herstellen kann, nur 2 oder 10

System.Net.ServicePointManager.DefaultConnectionLimit Dies ist die maximale Anzahl von Verbindungen, die die aktuelle Standardeinstellung erhalten können, wie in der untenstehenden Abbildung gezeigt:



Gibt es ein Standard-Nebenlaufzeitenlimit für HttpClient?

Vor .Net 4.0 basierte HttpWebRequest auf HTTP-Operationen. Standardmäßig gibt es ein sehr konservatives Maximum von 2 Nebenläufigkeitsgrenzen für dieselbe Seite, was oft dazu führt, dass HttpWebRequests standardmäßig nicht die ideale Geschwindigkeit erreichen (ich schätze, diese Strategie frustriert viele Programmierer), und der Wert von App.config oder ServicePointManager.DefaultConnectionLimit muss geändert werden.

Microsoft hat eine HttpClient-Klasse in .Net 4.5 eingeführt, um HTTP-Operationen zu handhaben, und ich dachte, HttpClient und HttpWebRequest folgen derselben Richtlinie. Heute, beim Schreiben eines Multithreaded-Downloadprogramms, habe ich 10 gleichzeitige Verbindungen verwendet und festgestellt, dass HttpClient standardmäßig kein Limit für gleichzeitige Nummern hat.

Zuerst dachte ich, es wäre so. Net 4.5 entfernte dieses Nebenläufigkeitslimit (schließlich folgt im Grunde niemand mehr diesem Standard), schrieb dann den entsprechenden Code mit WebRequest neu und stellte fest, dass es immer noch 2 Nebenläufigkeitsgrenze war und der Wert von ServicePointManager.DefaultConnectionLimit ebenfalls 2 betrug. Das heißt, HttpClient wird nicht von der Nebenläufigkeitsrichtlinie von HttpWebRequest kontrolliert, und es gibt kein Systemebene-Nebenläufigkeitslimit.

Außerdem habe ich bei Tests festgestellt, dass HttpWebRequest nicht standardmäßig maximal 2 Nebenwahlen für alle Adressen hat. Zum BeispielEs gibt keine Nebenläufigkeitsbegrenzung für lokale HTTP-Adressverbindungen (http://localhost/*).

C#-Multithreaded-Umgebungsaufrufe an HttpWebRequest gleichzeitige Verbindungsgrenze

.nets HttpWebRequest oder WebClient hat im Falle von Multithreading eine gleichzeitige Verbindungsgrenze, die standardmäßig auf Desktop-Betriebssystemen wie Windows XP und Windows 7 bei 2 liegt und standardmäßig auf Server-Betriebssystemen 10. Wenn du diese gleichzeitige Verbindungsgrenze nicht änderst, beträgt die Anzahl der HTTP-Verbindungen, die ein Client gleichzeitig herstellen kann, nur 2 oder 10. Für einige Anwendungen, wie Browser oder Spiders, ist die Anzahl von 2 oder 10 Nebenwahl zu gering und beeinflusst die Leistung der Anwendung erheblich. Diese Grenze für gleichzeitige Verbindungen ist auf die HTTP 1.0- und HTTP 1.1-Standards zurückzuführen, die maximal zwei gleichzeitige Verbindungen vorschreiben. Allerdings folgen Mainstream-Browser dieser Regel nicht mehr, aber das .NET-Framework folgt dieser Regel weiterhin standardmäßig.

Viele Artikel sagen, dass der asynchrone Zugriff auf HttpWebRequest die gleichzeitige Leistung verbessern kann, aber ich habe getestet, dass die synchrone oder asynchrone Zugriffsleistung nicht gut ist, wenn man die Standardanzahl der gleichzeitigen Verbindungen nicht ändert.

Wir können auch die maximale Anzahl gleichzeitiger Verbindungen in app.config wie folgt festlegen:

Referenzartikel

Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.





Vorhergehend:Xshell Xftp Um dieses Programm weiterhin zu nutzen, musst du das neueste ...
Nächster:Der Maven-Befehl pusht JARK-Pakete von Drittanbietern in private Nexus-Repositories
Veröffentlicht am 26.12.2021, 17:20:57 |
Lernen lernen。。。。。
Veröffentlicht am 10.01.2022 08:42:47 |
Lernen lernen。。。。。
Veröffentlicht am 08.03.2022, 15:58:54 |
Lernen...
 Vermieter| Veröffentlicht am 18.2.2023, 21:47:09 |
Zusätzlich ist die Lösung

 Vermieter| Veröffentlicht am 10.03.2023, 21:21:15 |
Configure via web.config

Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com