При планиране на задачи задачата е да се симулира иницииране на HTTP заявка и да се установи, че когато има повече задачи, планирането на задачи изглежда като фалшива смърт.
Максималният стандартен брой заявени връзки на нормална Windows система е 2, а при сървърна операционна система по подразбиране е 10. Ако не промениш това ограничение на паралелната връзка,Тогава броят на http връзките, които клиентът може да направи едновременно, е само 2 или 10。
System.Net.ServicePointManager.DefaultConnectionLimit Това е максималният брой връзки, които могат да получат текущата настройка по подразбиране, както е показано на фигурата по-долу:
Има ли стандартен лимит за конкурентност за HttpClient?
Преди .Net 4.0, HttpWebRequest разчиташе на HTTP операциите. По подразбиране има много консервативен максимум от 2 лимита за паралелност за един и същи сайт, което често кара HttpWebRequests да не достигне идеалната скорост по подразбиране (предполагам, че тази стратегия дразни много програмисти), а стойността на App.config или ServicePointManager.DefaultConnectionLimit трябва да бъде модифицирана.
MS въведе HttpClient клас в .Net 4.5 за обработка на Http операции, и мислех, че HttpClient и HttpWebRequest следват една и съща политика. Днес, когато пишех многонишкова програма за изтегляне, използвах 10 едновременни връзки и установих, че HttpClient по подразбиране няма ограничение за едновременен номер.
Първоначално си помислих, че е така. Net 4.5 премахна това ограничение за конкурентност (в крайна сметка, всъщност никой вече не следва този стандарт), след което пренаписа съответния код с WebRequest и установи, че все още е лимит от 2 конкурентности, а стойността на ServicePointManager.DefaultConnectionLimit също беше 2. Тоест, HttpClient не се контролира от политиката за конкурентност на HttpWebRequest и няма системно ограничение за конкурентност.
Освен това, по време на тестове установих, че HttpWebRequest по подразбиране не достига максимум 2 конкурентности за всички адреси. НапримерНяма ограничение за паралелност за локални HTTP адресни връзки (http://localhost/*).。
C# многонишкови обаждания към HttpWebRequest ограничение на конкурентната връзка
HttpWebRequest или WebClient на .net има ограничение на едновременната връзка при многонишкови системи, което е 2 по подразбиране при настолни операционни системи като Windows XP и Windows 7, и 10 по подразбиране при сървърни операционни системи. Ако не промените това ограничение за едновременно свързване, броят на HTTP връзките, които клиентът може да направи наведнъж, е само 2 или 10. За някои приложения, като браузъри или паяци, броят от 2 или 10 паралелности е твърде малък и силно влияе на производителността на приложението. Това ограничение на паралелната връзка се дължи на стандартите HTTP 1.0 и HTTP 1.1, които изискват максимум 2 едновременни връзки. Въпреки това, масовите браузъри вече не спазват това правило, но .NET фреймуъркът по подразбиране го спазва.
Много статии казват, че асинхронният достъп до HttpWebRequest може да подобри едновременното представяне, но аз съм тествал, че ако не променяте стандартния брой на паралелните връзки, синхронната или асинхронната производителност на достъпа не е добра.
Можем също така да зададем максималния брой паралелни връзки в app.config по следния начин:
Референтна статия
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
|