asp.net 对于每个请求,RestClient应该是单例的还是新的

zd287kbt  于 2023-05-02  发布在  .NET
关注(0)|答案(2)|浏览(252)

ASP.NetHttpClient是一次性的,很多文章都说,由于性能的原因,应该使用单例模式来使用它。但是当我看到RestClient时,它不能被处理,并且在Recommended-Usage页面中,示例每次都将newRestClient。我应该对RestClient使用单例模式还是每次都使用new?如果我每次都new它会有任何性能问题吗?
RestSharp GitHub
一些参考文献:
Do HttpClient and HttpClientHandler have to be disposed
YOU'RE USING HTTPCLIENT WRONG AND IT IS DESTABILIZING YOUR SOFTWARE

monwx1rj

monwx1rj1#

Restclient版本〈107:

我应该为RestClient使用单例模式,还是每次都更新它,如果每次都更新它,会有性能问题吗?
使用RestSharp的推荐方法是为每个请求创建一个新示例。
它不同于HttpClient推荐的Singleton方法。原因是under the hoodRestSharp使用HttpWebRequest进行HTTP交互,而不是HttpClient。这就是使用模式不同的原因。
如果我每次都创建它,我会像HttpClient一样遇到性能问题吗?
不应该为每个请求创建一个新的HttpClient示例的主要原因不是性能方面的考虑。创建和初始化所花费的时间将占用后续网络调用所花费的时间的一小部分。使用HttpClientis the following的单例示例的主要原因:
HttpClient的目的是示例化一次,并在应用程序的整个生命周期中重用。为每个请求示例化一个HttpClient类将耗尽重负载下可用的套接字数量。这将导致SocketException错误。
RestSharp不像HttpClient那样使用连接池,并且在使用后不会留下打开的套接字。这就是为什么在每个请求中创建一个新的RestClient示例是安全的(并且是推荐的)。
如果你使用RestClient的重用示例,你会获得任何性能提升吗?好吧,你将保存创建对象和初始化的时间。然而,这一时间非常接近0,而且它只是后续网络呼叫所花费的时间的一小部分。你不能重复使用其他的。NET对象,如List<T>,因为性能的考虑,是吗?您应该对RestClient执行相同的操作。它只是以一种暗示这种使用场景的方式开发的。

fnvucqvd

fnvucqvd2#

对于Restclient版本〉= 107:

v107版本开始,您应该只创建一个示例。此版本在内部使用HttpClient
不要为每个HTTP调用示例化RestClient。RestSharp在内部创建了一个新的HttpClient示例,你会得到大量挂起的连接,最终耗尽连接池。
如果使用依赖注入容器,请将API客户端注册为单例。
RestClient生命周期
如果您想知道为什么会出现这种情况,可以查看解释here

相关问题