HttpClientha sido diseñado para ser reutilizado para múltiples llamadas . Incluso a través de múltiples hilos. El HttpClientHandlertiene credenciales y las galletas que están destinados a ser reutilizada a través de las llamadas. Tener una nueva HttpClientinstancia requiere volver a configurar todo eso. Además, la DefaultRequestHeaderspropiedad contiene propiedades destinadas a múltiples llamadas. Tener que restablecer esos valores en cada solicitud derrota el punto.
Otro beneficio importante de HttpClientes la capacidad de agregar HttpMessageHandlersa la tubería de solicitud / respuesta para aplicar preocupaciones transversales. Estos podrían ser para el registro, la auditoría, la limitación, el manejo de redireccionamiento, el manejo fuera de línea, la captura de métricas. Todo tipo de cosas diferentes. Si se crea un nuevo HttpClient en cada solicitud, entonces todos estos controladores de mensajes deben configurarse en cada solicitud y de alguna manera también se debe proporcionar cualquier estado de nivel de aplicación que se comparta entre las solicitudes de estos controladores.
Cuanto más utilice las funciones HttpClient, más verá que reutilizar una instancia existente tiene sentido.
Sin embargo, el mayor problema, en mi opinión, es que cuando HttpClientse elimina una clase, se elimina HttpClientHandler, lo que luego cierra por la fuerza la TCP/IPconexión en el conjunto de conexiones que administra ServicePointManager. Esto significa que cada solicitud con una nueva HttpClientrequiere restablecer una nueva TCP/IPconexión.
Según mis pruebas, usando HTTP simple en una LAN, el impacto en el rendimiento es bastante insignificante. Sospecho que esto se debe a que hay un keepalive TCP subyacente que mantiene la conexión abierta incluso cuando HttpClientHandlerintenta cerrarla.
En las solicitudes que pasan por Internet, he visto una historia diferente. He visto un impacto de rendimiento del 40% debido a que tengo que volver a abrir la solicitud cada vez.
Sospecho que el golpe en una HTTPSconexión sería aún peor.
Mi consejo es mantener una instancia de HttpClient durante toda la vida útil de su aplicación para cada API distinta a la que se conecte.
StopwatchSin embargo, no estoy seguro, podría usar la clase para compararla. Mi estimación sería que tiene más sentido tener una solaHttpClient, suponiendo que todas esas instancias se usen en el mismo contexto.