ASP.Net HttpClient es desechable, y muchos artículos dicen que debe usar el patrón singleton para usarlo debido al rendimiento. Pero cuando veo el RestClient , no se puede desechar, y en la página de uso recomendado, la muestra mostrará el RestClient new cada vez. ¿Debo usar el patrón singleton para RestClient o debo new cada vez? Si lo new cada vez, ¿habrá algún problema de rendimiento?
Algunas referencias:
¿Se deben eliminar HttpClient y HttpClientHandler?
ESTÁS UTILIZANDO MAL HTTPCLIENT Y ESTÁS DESESTABILIZANDO TU SOFTWARE
¿Debo usar el patrón singleton para RestClient o debo actualizarlo cada vez, si lo actualizo cada vez, habrá algún problema de rendimiento?
La forma recomendada de usar RestSharp es crear una nueva instancia por solicitud.
Se diferencia del enfoque Singleton recomendado para HttpClient . Y la razón es que, bajo el capó RestSharp usa HttpWebRequest para la interacción HTTP, no HttpClient . Es por eso que el modelo de uso difiere.
Si lo creo cada vez, ¿tengo problemas de rendimiento como HttpClient?
La razón principal por la que no debe crear una nueva instancia de HttpClient para cada solicitud no es una consideración de rendimiento. El tiempo dedicado a la creación e inicialización tomará una pequeña fracción del tiempo dedicado a la siguiente llamada de red. La razón principal para usar la instancia singleton de HttpClient es la siguiente :
HttpClient está diseñado para ser instanciado una vez y reutilizado a lo largo de la vida de una aplicación. Crear instancias de una clase HttpClient para cada solicitud agotará la cantidad de sockets disponibles bajo cargas pesadas. Esto dará como resultado errores de SocketException.
RestSharp no usa el grupo de conexiones como HttpClient y no deja sockets abiertos después del uso. Por eso es seguro (y recomendado) crear una nueva instancia de RestClient por solicitud.
¿Obtendrá alguna mejora en el rendimiento si utiliza la instancia de reutilización de RestClient ? Bueno, ahorrará tiempo para la creación del objeto y su inicialización. Sin embargo, este tiempo está muy cerca de 0 y, además, es una pequeña fracción del tiempo empleado para seguir la llamada de la red. No reutiliza otros objetos .NET como List<T> debido a consideraciones de rendimiento, ¿verdad? Debe hacer lo mismo para RestClient . Simplemente se desarrolló de una manera que implica tal escenario de uso.
A partir de la versión v107 , debe crear solo una instancia. Esta versión usa HttpClient internamente.
No cree una instancia de RestClient para cada llamada HTTP. RestSharp crea una nueva instancia de HttpClient internamente, y obtendrá muchas conexiones colgantes y eventualmente agotará el grupo de conexiones.
Si usa un contenedor de inyección de dependencia, registre su cliente de API como singleton.
Si se pregunta por qué es así, puede ver la explicación aquí .