Lors de la planification des tâches, la tâche consiste à simuler l’initiation d’une requête HTTP, et constater que lorsqu’il y a plus de tâches, la planification des tâches ressemble à une fausse mort.
Le nombre maximal de connexions demandées sur un système Windows normal est 2, et sur un système d’exploitation serveur, il est par défaut 10. Si vous ne modifiez pas cette limite de connexion concurrente,Ensuite, le nombre de connexions http que le client peut établir simultanément n’est que 2 ou 10。
System.Net.ServicePointManager.DefaultConnectionLimit C’est le nombre maximal de connexions pouvant obtenir le réglage par défaut actuel, comme montré dans la figure ci-dessous :
Existe-t-il une limite de concurrence par défaut pour HttpClient ?
Avant .Net 4.0, les opérations Http étaient utilisées par HttpWebRequest. Il a par défaut un maximum très conservateur de 2 limites de concurrence pour le même site, ce qui fait souvent que les requêtes HttpWebRequest n’obtiennent pas la vitesse idéale par défaut (je suppose que cette stratégie frustre beaucoup de codeurs), et la valeur d’App.config ou ServicePointManager.DefaultConnectionLimit doit être modifiée.
Microsoft a introduit une classe HttpClient en .Net 4.5 pour gérer les opérations Http, et je pensais que HttpClient et HttpWebRequest suivaient la même politique. Aujourd’hui, lors de l’écriture d’un programme de téléchargement multithread, j’ai utilisé 10 connexions concurrentes et j’ai constaté qu’HttpClient n’a pas de limite de nombre concurrent par défaut.
Au début, je pensais que oui. Net 4.5 a supprimé cette limite de concurrence (après tout, pratiquement plus personne ne suit cette norme aujourd’hui), puis a réécrit le code pertinent avec WebRequest, et a constaté qu’elle restait la limite de 2 concurrents, et que la valeur de ServicePointManager.DefaultConnectionLimit était également de 2. C’est-à-dire que HttpClient n’est pas contrôlé par la politique de concurrence HttpWebRequest, et il n’existe pas de limite de concurrence au niveau du système.
De plus, lors des tests, j’ai constaté que HttpWebRequest ne permet pas de faire concurrence maximale de 2 pour toutes les adresses. Par exempleIl n’y a pas de limite de concurrence pour les connexions d’adresses HTTP locales (http://localhost/*).。
Appels d’environnement multithread C# à la limite de connexion concurrente HttpWebRequest
Le HttpWebRequest ou WebClient de .net a une limite de connexion concurrente dans le cas du multithreading, qui est de 2 par défaut sur les systèmes d’exploitation de bureau tels que Windows XP et Windows 7, et de 10 par défaut sur les systèmes serveurs. Si vous ne modifiez pas cette limite de connexion concurrente, le nombre de connexions HTTP qu’un client peut effectuer simultanément n’est que 2 ou 10. Pour certaines applications, comme les navigateurs ou les araignées, le nombre de concurrents de 2 ou 10 est trop faible et affecte grandement les performances de l’application. Cette limite de connexion concurrente est due aux normes HTTP 1.0 et HTTP 1.1 qui spécifient un maximum de 2 connexions simultanées. Cependant, les navigateurs traditionnels ne suivent plus cette règle, mais le framework .NET la suit toujours par défaut.
De nombreux articles disent que l’accès asynchrone à HttpWebRequest peut améliorer les performances concurrentes, mais j’ai testé que si vous ne changez pas le nombre par défaut de connexions concurrentes, les performances d’accès synchrones ou asynchrones ne sont pas bonnes.
Nous pouvons également définir le nombre maximal de connexions concurrentes dans app.config comme suit :
Article de référence
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
|