ASP.NETHttpClient是一次性的,很多文章都说,由于性能原因,应该使用单例模式.但当我看到RestClient时,它无法被处理,在Recommended-Usage页中,样本每次都会显示RestClient.我应该每次使用单例模式RestClient还是new?如果我每次都这么做,会不会有性能问题?

RestSharp GitHub

一些参考资料:

Do HttpClient and HttpClientHandler have to be disposed

YOU'RE USING HTTPCLIENT WRONG AND IT IS DESTABILIZING YOUR SOFTWARE

推荐答案

我应该为RestClient使用单例模式还是新模式

建议使用RestSharp的方式是 for each 请求创建一个新实例.

它与建议用于HttpClient的Singleton方法不同.原因是under the hoodRestSharp使用HttpWebRequest进行HTTP交互,而不是HttpClient.这就是使用模式不同的原因.

如果我每次都创建它,我是否会遇到性能问题,就像 HttpClient?

不应该 for each 请求创建HttpClient的新实例的主要原因不是性能方面的考虑.创建和初始化所花费的时间将只占后续网络调用所花费时间的一小部分.使用HttpClient is the following的单例实例的主要原因是:

HttpClient旨在实例化一次,然后在整个过程中重复使用 应用程序的生命周期.实例化的HttpClient类 每个请求都将耗尽重负荷下可用的套接字数量 满载而归.这将导致SocketException错误.

RestSharp不会像HttpClient一样使用连接池,并且在使用后不会留下打开的套接字.这就是为什么每个请求创建一个RestClient的新实例是安全的(并且是推荐的).

如果使用重用实例RestClient,您会获得性能改进吗?那么,您将节省创建对象及其初始化的时间.然而,这段时间非常接近0,而且它只是跟踪网络呼叫所花费时间的一小部分.你不能重复使用其他的.NET对象,比如List<T>,是出于性能考虑吗?RestClient美元你也应该这么做.它只是以一种暗示这种使用场景的方式开发的.

Asp.net相关问答推荐

ASP.NET多行查询文本框中的多个名称并将结果添加到单个网格视图

ASP.NET MVC forEach 循环仅返回 1 个值

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST

是否可以访问位于另一个项目中的 MVC 视图?

在 cookie 中存储多个值

发布发布事件

在使用网络服务器加载它们之前,如何编译 Asp.Net Aspx 页面?

问题映射 HttpHandler --> HTTP Error 404 Not Found

Asp.net Identity 密码哈希

Asp.net 中的下拉列表验证使用必填字段验证器

如何将枚举类型绑定到 DropDownList?

在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

IIS 会话超时与 ASP.NET 会话超时

HttpResponse.End 或 HttpResponse.Close 与 HttpResponse.SuppressContent

Web API 必填参数

主机与 DnsSafeHost

使用 FormsAuthentication.SetAuthCookie 存储更多信息

System.Drawing.Image.FromFile() 上的内存不足异常

.Net 上是否有 URL 验证器?

ASP.NET 自定义控件 - 未知的服务器标记