ASP.Net HttpClient
pourrait disposer et de nombreux articles disent que vous devriez utiliser le modèle singleton pour l'utiliser à cause des performances mais quand je vois le RestClient
il ne peut pas être supprimé et dans le sage recommandé page l'échantillon sera new
le RestClient
chaque fois que mon problème devrais-je utiliser le modèle singleton pour RestClient
ou devrais-je new
à chaque fois, si je new
à chaque fois, y aura-t-il des problèmes de performances?
Quelques références:
Faut-il éliminer HttpClient et HttpClientHandler
VOUS UTILISEZ HTTPCLIENT MAL ET IL IS DESTABILISANT VOTRE LOGICIEL
dois-je utiliser un modèle singleton pour RestClient ou dois-je le renouveler à chaque fois, si je le renouvelle à chaque fois, y aura-t-il des problèmes de performances?
La manière recommandée d'utiliser RestSharp
est de créer une nouvelle instance par requête.
Elle diffère de l'approche Singleton recommandée pour HttpClient
. Et la raison en est que sous le capotRestSharp
utilise HttpWebRequest
pour l'interaction HTTP, pas HttpClient
. C'est pourquoi le modèle d'utilisation diffère.
Si je le crée à chaque fois, est-ce que j'obtiens un problème de performances tout comme le HttpClient?
La principale raison pour laquelle vous ne devez pas créer une nouvelle instance de HttpClient
pour chaque demande n'est pas une considération de performances. Le temps consacré à la création et à l'initialisation prendra une infime fraction du temps passé à suivre l'appel réseau. La principale raison d'utiliser l'instance singleton de HttpClient
est la suivante :
HttpClient est destiné à être instancié une fois et réutilisé tout au long de la vie d'une application. L'instanciation d'une classe HttpClient pour chaque demande épuisera le nombre de sockets disponibles sous de lourdes charges. Cela entraînera des erreurs SocketException.
RestSharp
n'utilise pas le pool de connexions comme HttpClient
et ne laisse pas de sockets ouverts après l'utilisation. C'est pourquoi il est sûr (et recommandé) de créer une nouvelle instance de RestClient
par requête.
Améliorerez-vous les performances si vous utilisez une instance de réutilisation de RestClient
? Eh bien, vous gagnerez du temps pour la création d'objet et son initialisation. Cependant, cette fois est très proche de 0
et en plus c'est une infime fraction du temps passé à suivre un appel réseau. Vous ne réutilisez pas d'autres objets .NET comme List<T>
pour des raisons de performances, n'est-ce pas? Vous devriez faire de même pour RestClient
. Il est juste développé d'une manière qui implique un tel scénario d'utilisation.