Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 16497|Válasz: 5

[Forrás] .NET/C# többszálas egyidejű egyidejű HttpWebRequest gödörrel

[Linket másol]
Közzétéve: 2021-12-20 15:21:04 | | | |
Feladat ütemezésekor az ütemezés feladata, hogy szimuláljuk egy HTTP kérés indítását, és tapasztaljuk, hogy amikor több feladat van, a feladat ütemezése olyan, mintha hamis halál lenne.

Egy normál Windows rendszeren a maximális alapértelmezett kért kapcsolatok száma 2, szerver operációs rendszeren pedig alapértelmezés szerint 10. Ha nem módosítod ezt az egyidejű kapcsolati korlátot,Ekkor a kliens egyszerre csak 2 vagy 10 HTTP kapcsolatot tud létrehozni

System.Net.ServicePointManager.DefaultConnectionLimit Ez a maximális kapcsolatszám, amely elérheti a jelenlegi alapértelmezett beállítást, ahogy az alábbi ábrán látható:



Van alapértelmezett egyidejű korlátozás a HttpClient-re?

A .Net 4.0 előtt a Http műveletekre a HttpWebRequest támaszkodott. Alapértelmezés szerint nagyon konzervatív maximum 2 párhuzamos korlát van ugyanazon az oldalon, ami gyakran azt eredményezi, hogy a HttpWebRequests alapértelmezés szerint nem kapja meg az ideális sebességet (gondolom, ez a stratégia sok kódolót frusztrál), és az App.config vagy a ServicePointManager.DefaultConnectionLimit értékét módosítani kell.

Az MS bevezetett egy HttpClient osztályt a .Net 4.5-be a Http műveletek kezelésére, és úgy gondoltam, hogy a HttpClient és a HttpWebRequest ugyanazt a szabályzatot követik. Ma, amikor többszálas letöltőprogramot írtam, 10 párhuzamos kapcsolatot használtam, és azt tapasztaltam, hogy a HttpClientnek alapértelmezetten nincs párhuzamos számkorláta.

Eleinte azt hittem, hogy az. A Net 4.5 eltávolította ezt a párhuzamos korlátot (hiszen gyakorlatilag senki sem követi ezt a szabványt), majd a megfelelő kódot WebRequest-szel újraírta, és megállapította, hogy ez továbbra is 2 egyidejű korlát, és a ServicePointManager.DefaultConnectionLimit értéke is 2. Vagyis a HttpClient nem a HttpWebRequest egyidejű szabályzata által irányítható, és nincs rendszerszintű egyidejű korlátozás.

Ezenkívül tesztelés során azt találtam, hogy a HttpWebRequest nem alapértelmezett maximum 2 egyidejű adást biztosít minden címen. PéldáulNincs párhuzamos korlátozás a helyi HTTP címkapcsolatokra (http://localhost/*).

C# többszálas környezeti hívások HttpWebRequest egyidejű kapcsolati korláthoz

A .net HttpWebRequest vagy WebClient egyidejű kapcsolódási korlátja van multithreading esetén, amely alapértelmezés szerint 2 az asztali operációs rendszereken, mint Windows XP és Windows 7, és alapértelmezett 10 szerver operációs rendszereken. Ha nem változtatod meg ezt az egyidejű kapcsolati korlátot, akkor egy kliens egyszerre csak 2 vagy 10 HTTP kapcsolatot tud létrehozni. Néhány alkalmazásnál, például böngészők vagy pókok esetében, a 2 vagy 10 párhuzamos száma túl kicsi, és jelentősen befolyásolja az alkalmazás teljesítményét. Ez az egyidejű kapcsolati korlát a HTTP 1.0 és HTTP 1.1 szabványoknak köszönhető, amelyek legfeljebb 2 párhuzamos kapcsolatot határoznak meg. Azonban a mainstream böngészők már nem követik ezt a szabályt, de a .NET keretrendszer alapértelmezés szerint továbbra is követi ezt a szabályt.

Sok cikk szerint a HttpWebRequest aszinkron hozzáférése javíthatja az egyidejű teljesítményt, de én teszteltem, hogy ha nem változtatod meg az alapértelmezett párhuzamos kapcsolatok számát, akkor a szinkron vagy aszinkron hozzáférési teljesítmény nem jó.

Az app.config felületén a maximális egyidejű kapcsolatok számát is beállíthatjuk az alábbiakkal:

Referencia cikk

A hiperlink bejelentkezés látható.
A hiperlink bejelentkezés látható.





Előző:Xshell Xftp Ahhoz, hogy tovább használd ezt a programot, a legfrissebb...
Következő:A Maven parancs harmadik féltől származó jar csomagokat tol a Nexus privát tárolókba
Közzétéve: 2021-12-26 17:20:57 |
Tanulj meg。。。。。
Közzétéve: 2022-1-10 08:42:47 |
Tanulj meg。。。。。
Közzétéve: 2022-3-8 15:58:54 |
Tanul...
 Háziúr| Közzétéve: 2023-2-18 21:47:09 |
Ezen felül a megoldás

 Háziúr| Közzétéve: 2023-3-10 21:21:15 |
Konfigurálás a web.config segítségével

Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com