Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 16497|Risposta: 5

[Fonte] .NET/C# concorrenza multithreaded utilizzando il pit di HttpWebRequest

[Copiato link]
Pubblicato il 20-12-2021 15:21:04 | | | |
Quando si effettua la pianificazione delle attività, il compito di pianificazione consiste nel simulare l'avvio di una richiesta HTTP e scoprire che quando ci sono più attività, la pianificazione sembra essere come una falsa morte.

Il numero massimo predefinito di connessioni richieste su un sistema Windows normale è 2, mentre su un sistema operativo server il numero predefinito è 10. Se non modifichi questo limite di connessione concorrente,Poi il numero di connessioni http che il client può fare contemporaneamente è solo 2 o 10

System.Net.ServicePointManager.DefaultConnectionLimit Questo è il numero massimo di connessioni che possono ottenere l'impostazione predefinita corrente, come mostrato nella figura sottostante:



Esiste un limite predefinito di concorrenza per HttpClient?

Prima di .Net 4.0, le operazioni Http erano affidabili a HttpWebRequest. Ha un massimo molto conservativo di 2 limiti di concorrenza per lo stesso sito di default, il che spesso fa sì che le HttpWebRequest non raggiungano la velocità ideale di default (immagino che questa strategia frustri molti programmatori), e il valore di App.config o ServicePointManager.DefaultConnectionLimit deve essere modificato.

Microsoft ha introdotto una classe HttpClient in .Net 4.5 per gestire le operazioni Http, e pensavo che HttpClient e HttpWebRequest seguissero la stessa politica. Oggi, scrivendo un programma di download multithread, ho usato 10 connessioni concorrenti e ho scoperto che HttpClient non ha di default un limite di numero concorrente.

All'inizio pensavo di sì. Net 4.5 ha rimosso questo limite di concorrenza (dopotutto, praticamente nessuno segue questo standard ormai), poi ha riscritto il codice rilevante con WebRequest, scoprendo che era ancora un limite di concorrenza di 2, e il valore di ServicePointManager.DefaultConnectionLimit era anch'esso 2. Cioè, HttpClient non è controllato dalla politica di concorrenza HttpWebRequest e non esiste un limite di concorrenza a livello di sistema.

Inoltre, durante i test, ho scoperto che HttpWebRequest non si comporta di default a un massimo di 2 concorrenti per tutti gli indirizzi. Per esempioNon esiste un limite di concorrenza per le connessioni locali con indirizzi HTTP (http://localhost/*).

Chiamate multithread C# al limite di connessione concorrente HttpWebRequest

L'HttpWebRequest o WebClient di .net ha un limite di connessione concorrente nel caso del multithreading, che è 2 di default sui sistemi desktop come Windows XP e Windows 7, e 10 di default sui sistemi operativi server. Se non modifichi questo limite di connessione concorrente, il numero di connessioni HTTP che un client può effettuare contemporaneamente è solo 2 o 10. Per alcune applicazioni, come browser o spider, il numero di concorrenza di 2 o 10 è troppo basso e influisce molto sulle prestazioni dell'applicazione. Questo limite di connessione concorrente è dovuto agli standard HTTP 1.0 e HTTP 1.1 che specificano un massimo di 2 connessioni concorrenti. Tuttavia, i browser tradizionali non seguono più questa regola, ma il framework .NET la segue ancora di default.

Molti articoli dicono che accedere a HttpWebRequest in modo asincrono può migliorare le prestazioni concorrenti, ma ho testato che se non si cambia il numero predefinito di connessioni concorrenti, le prestazioni di accesso sincrone o asincrone non sono buone.

Possiamo anche impostare il numero massimo di connessioni concorrenti in app.config come segue:

Articolo di riferimento

Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.





Precedente:Xshell Xftp Per continuare a usare questo programma, devi applicare l'ultima versione...
Prossimo:Il comando Maven spinge pacchetti jar di terze parti verso repository privati Nexus
Pubblicato il 26-12-2021 17:20:57 |
Impara a imparare。。。。。
Pubblicato il 10-1-2022 08:42:47 |
Impara a imparare。。。。。
Pubblicato il 8-03-2022 15:58:54 |
Imparare...
 Padrone di casa| Pubblicato il 18-2-2023 21:47:09 |
Inoltre, la soluzione

 Padrone di casa| Pubblicato il 10-03-2023 21:21:15 |
Configura tramite web.config

Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com