Planuojant užduotis, planavimo užduotis yra imituoti HTTP užklausos inicijavimą ir nustatyti, kad kai yra daugiau užduočių, užduočių planavimas atrodo kaip netikra mirtis.
Didžiausias numatytasis prašomų ryšių skaičius įprastoje "Windows" sistemoje yra 2, o serverio operacinėje sistemoje - 10. Jei nepakeisite šio vienalaikio ryšio apribojimo,Tada http ryšių, kuriuos klientas gali užmegzti vienu metu, skaičius yra tik 2 arba 10。
System.Net.ServicePointManager.DefaultConnectionLimit Tai maksimalus ryšių, galinčių gauti dabartinį numatytąjį parametrą, skaičius, kaip parodyta paveikslėlyje žemiau:
Ar yra numatytasis HttpClient sutapimo limitas?
Iki .Net 4.0 Http operacijomis rėmėsi HttpWebRequest. Pagal nutylėjimą ji turi labai konservatyvų maksimalų 2 lygiagrečių limitų tą pačią svetainę, dėl kurios dažnai HttpWebRequests negauna idealaus greičio pagal nutylėjimą (manau, kad ši strategija nuvilia daugelį programuotojų), o App.config arba ServicePointManager.DefaultConnectionLimit vertė turi būti pakeista.
MS pristatė HttpClient klasę .Net 4.5 tvarkyti Http operacijas, ir aš maniau, kad HttpClient ir HttpWebRequest sekė tą pačią politiką. Šiandien, rašydamas kelių gijų atsisiuntimo programą, naudojau 10 vienalaikių ryšių ir pastebėjau, kad "HttpClient" pagal numatytuosius nustatymus neturi lygiagrečių skaičių limito.
Iš pradžių maniau, kad taip. Net 4.5 pašalino šį sutapimo limitą (juk iš esmės niekas nesilaiko šio standarto dabar), o tada perrašė atitinkamą kodą su WebRequest ir nustatė, kad jis vis dar buvo 2 sutapimo limitas, o ServicePointManager.DefaultConnectionLimit vertė taip pat buvo 2. Tai reiškia, kad "HttpClient" nekontroliuoja "HttpWebRequest" sutapimo strategija ir nėra sistemos lygio sutapimo apribojimo.
Be to, bandymų metu pastebėjau, kad "HttpWebRequest" pagal numatytuosius nustatymus nenustato daugiausiai 2 visų adresų sutapimo. PavyzdžiuiVietinių HTTP adresų ryšiams (http://localhost/*) lygiagrečiai neribojama.。
C# kelių gijų aplinkos iškvietimai į HttpWebRequest vienalaikio ryšio ribą
.net "HttpWebRequest" arba "WebClient" turi vienalaikio ryšio limitą kelių gijų atveju, kuris yra 2 pagal numatytuosius nustatymus darbalaukio operacinėse sistemose, tokiose kaip "Windows XP" ir "Windows 7", ir 10 pagal numatytuosius nustatymus serverių operacinėse sistemose. Jei nepakeisite šio vienalaikio ryšio apribojimo, HTTP ryšių, kuriuos klientas gali užmegzti vienu metu, skaičius bus tik 2 arba 10. Kai kurioms programoms, pvz., naršyklėms ar vorams, 2 arba 10 lygiagrečių skaičius yra per mažas ir labai veikia programos veikimą. Šis vienalaikio ryšio apribojimas yra dėl HTTP 1.0 ir HTTP 1.1 standartų, kurie nurodo ne daugiau kaip 2 vienu metu vykstančius ryšius. Tačiau pagrindinės naršyklės šios taisyklės nebelaiko, tačiau .NET sistema vis tiek laikosi šios taisyklės pagal numatytuosius nustatymus.
Daugelyje straipsnių sakoma, kad prieiga prie "HttpWebRequest" asinchroniškai gali pagerinti vienalaikį našumą, tačiau išbandžiau, kad jei nepakeisite numatytojo vienalaikių ryšių skaičiaus, sinchroninės ar asinchroninės prieigos našumas nėra geras.
Taip pat galime nustatyti maksimalų vienalaikių ryšių skaičių app.config taip:
Informacinis straipsnis
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
|