Al hacer planificación de tareas, la tarea de planificar consiste en simular la iniciación de una solicitud HTTP y descubrir que cuando hay más tareas, la planificación parece ser como una muerte falsa.
El número máximo por defecto de conexiones solicitadas en un sistema Windows normal es 2, y en un sistema operativo servidor por defecto es 10. Si no modificas este límite de conexión concurrente,Entonces, el número de conexiones http que el cliente puede hacer al mismo tiempo es solo 2 o 10。
System.Net.ServicePointManager.DefaultConnectionLimit Este es el número máximo de conexiones que pueden obtener la configuración predeterminada actual, como se muestra en la figura siguiente:
¿Existe un límite predeterminado de concurrencia para HttpClient?
Antes de .Net 4.0, las operaciones HttpWebRequest se basaban en las operaciones. Por defecto, tiene un máximo muy conservador de 2 límites de concurrencia para el mismo sitio, lo que a menudo hace que las HttpWebRequests no alcancen la velocidad ideal por defecto (supongo que esta estrategia frustra a muchos programadores), y el valor de App.config o ServicePointManager.DefaultConnectionLimit debe modificarse.
MS introdujo una clase HttpClient en .Net 4.5 para gestionar operaciones Http, y pensé que HttpClient y HttpWebRequest seguían la misma política. Hoy, al escribir un programa de descarga multihilo, usé 10 conexiones concurrentes y descubrí que HttpClient no tiene un límite de número concurrente por defecto.
Al principio pensé que sí. Net 4.5 eliminó este límite de concurrencia (al fin y al cabo, básicamente nadie sigue este estándar ahora), y luego reescribió el código relevante con WebRequest, y descubrió que seguía siendo el límite de concurrencia de 2, y que el valor de ServicePointManager.DefaultConnectionLimit también era 2. Es decir, HttpClient no está controlado por la política de concurrencia HttpWebRequest, y no existe un límite de concurrencia a nivel de sistema.
Además, durante las pruebas, descubrí que HttpWebRequest no se limita a un máximo de 2 concurrencias para todas las direcciones. Por ejemploNo existe un límite de concurrencia para las conexiones de direcciones HTTP locales (http://localhost/*).。
Llamadas de entorno multihilo C# al límite de conexión concurrente de HttpWebRequest
El HttpWebRequest o WebClient de .net tiene un límite de conexión concurrente en el caso del multihilo, que es 2 por defecto en sistemas operativos de escritorio como Windows XP y Windows 7, y 10 por defecto en sistemas operativos de servidor. Si no cambias este límite de conexión concurrente, el número de conexiones HTTP que un cliente puede hacer a la vez es solo 2 o 10. Para algunas aplicaciones, como navegadores o arañas, el número de concurrencia de 2 o 10 es demasiado pequeño y afecta enormemente al rendimiento de la aplicación. Este límite de conexión concurrente se debe a los estándares HTTP 1.0 y HTTP 1.1, que especifican un máximo de 2 conexiones concurrentes. Sin embargo, los navegadores convencionales ya no siguen esta regla, pero el framework .NET sigue siguiéndola por defecto.
Muchos artículos dicen que acceder a HttpWebRequest de forma asincrónica puede mejorar el rendimiento concurrente, pero he comprobado que si no cambias el número predeterminado de conexiones concurrentes, el rendimiento de acceso síncrono o asíncrono no es bueno.
También podemos establecer el número máximo de conexiones concurrentes en app.config de la siguiente manera:
Artículo de referencia
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
|