Tehtävien ajoituksessa ajoituksen tehtävänä on simuloida HTTP-pyynnön käynnistämistä, ja huomata, että kun tehtäviä on enemmän, tehtävien aikataulutus tuntuu kuin feikkikuolemalta.
Normaalissa Windows-järjestelmässä pyydettyjen yhteyksien enimmäisoletusmäärä on 2, ja palvelinkäyttöjärjestelmässä oletuksena 10. Jos et muokkaa tätä samanaikaista yhteysrajaa,Silloin asiakas voi tehdä samanaikaisesti vain 2 tai 10 http-yhteyksiä。
System.Net.ServicePointManager.DefaultConnectionLimit Tämä on enimmäismäärä yhteyksiä, jotka voivat saada nykyisen oletusasetuksen, kuten alla olevassa kuvassa on esitetty:
Onko HttpClientille oletusrajaa samanaikaisuudesta?
Ennen .Net 4.0:aa Http-toiminnot perustuivat HttpWebRequestiin. Samalla sivustolla on oletuksena hyvin konservatiivinen enimmäisrajoitus kahteen samanaikaisuuteen, mikä usein aiheuttaa sen, että HttpWebRequests ei saavuta ihanteellista nopeutta oletuksena (tämä strategia kai turhauttaa monia koodareita), ja App.config- tai ServicePointManager.DefaultConnectionLimit-arvoa täytyy muuttaa.
MS esitteli HttpClient-luokan .Net 4.5:een Http-toimintojen hallintaan, ja ajattelin, että HttpClient ja HttpWebRequest noudattivat samaa käytäntöä. Tänään, kun kirjoitin monisäikeistä latausohjelmaa, käytin 10 samanaikaista yhteyttä ja huomasin, että HttpClientissä ei ole oletuksena samanaikaista lukumäärää.
Aluksi luulin niin. Net 4.5 poisti tämän samanaikaisuusrajoituksen (loppujen lopuksi kukaan ei noudata tätä standardia enää), ja kirjoitti sitten relevantin koodin uudelleen WebRequestilla, ja havaitsi, että kyseessä oli edelleen 2 samanaikaisuusraja, ja ServicePointManager.DefaultConnectionLimit -arvo oli myös 2. Toisin sanoen HttpClientia ei ohjaa HttpWebRequestin rinnakkaiskäytännöt, eikä järjestelmätason samanaikaisuusrajoitusta ole.
Lisäksi testauksen aikana huomasin, että HttpWebRequest ei oletuksena ole enintään 2 samanaikaisuutta kaikille osoitteille. EsimerkiksiPaikallisille HTTP-osoiteyhteyksille (http://localhost/*) ei ole samanaikaisuusrajaa.。
C# monisäikeinen ympäristökutsu HttpWebRequestin samanaikaiseen yhteysrajoitukseen
.netin HttpWebRequest- tai WebClient-sovelluksella on samanaikainen yhteysrajoitus monisäikeisyyden tapauksessa, joka on oletuksena 2 käyttöjärjestelmässä kuten Windows XP:ssä ja Windows 7:ssä sekä 10 oletuksena palvelinkäyttöjärjestelmissä. Jos et muuta tätä samanaikaista yhteysrajaa, asiakas voi tehdä HTTP-yhteyksiä kerrallaan vain 2 tai 10. Joillakin sovelluksilla, kuten selaimilla tai hämähäkkeillä, samanaikaisuuden määrä 2 tai 10 on liian pieni ja vaikuttaa merkittävästi sovelluksen suorituskykyyn. Tämä samanaikainen yhteysrajoitus johtuu HTTP 1.0- ja HTTP 1.1 -standardeista, jotka määrittelevät enintään 2 samanaikaista yhteyttä. Kuitenkin valtavirran selaimet eivät enää noudata tätä sääntöä, mutta .NET-kehys noudattaa tätä sääntöä oletuksena.
Monissa artikkeleissa sanotaan, että HttpWebRequestin asynkroninen käyttö voi parantaa samanaikaista suorituskykyä, mutta olen testannut, että jos et muuta oletuslukumäärää samanaikaisissa yhteyksissä, synkroninen tai asynkroninen pääsysuorituskyky ei ole hyvä.
Voimme myös asettaa app.configissa samanaikaisten yhteyksien maksimimäärän seuraavasti:
Viiteartikkeli
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
|