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ó.
|