web-dev-qa-db-fra.com

RestClient doit-il être singleton ou nouveau pour chaque demande

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?

RestSharp GitHub

Quelques références:

Faut-il éliminer HttpClient et HttpClientHandler

VOUS UTILISEZ HTTPCLIENT MAL ET IL IS DESTABILISANT VOTRE LOGICIEL

13
MichaelMao

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 HttpClientest 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.

23
CodeFuller