实测 c# .net 中 httpwebrequest 和 httpclient 性能 区别 对比

实测 c# .net 中 httpwebrequest 和 httpclient 性能区别

以下是httpclient的代码

using (var http = new HttpClient())

                      {
                          
                          //使用FormUrlEncodedContent做HttpContent
                          var content = new FormUrlEncodedContent(new Dictionary<string, string>()
                                                  {
                                                  {"token", steptoken},
                                                  {"id", steporderid},
                                                  {"driverId", stepdriverid}
                                                  });


                          s_totalwebrequest0++;
                          var response = await http.PostAsync("http://" + s_webapipro + "/denyOrder", content);
                          string res = await response.Content.ReadAsStringAsync();

                          s_totalwebrequest1++;

JObject obj = JObject.Parse(res);

 }

以下是httpwebrequest的代码

                          string url = "http://" + GetWebApiPro() + "/denyOrder";
                          string postData = "token=" + steptoken + "&id=" + steporderid + "&driverId=" + stepdriverid;
                          byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                          HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
                          webRequest.Method = "post";
                          webRequest.ContentType = "application/x-www-form-urlencoded";
                          webRequest.ContentLength = byteArray.Length;
                          System.IO.Stream newStream = webRequest.GetRequestStream();
                          newStream.Write(byteArray, 0, byteArray.Length);
                          newStream.Close();
                          HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
                          string res = new System.IO.StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();

JObject obj = JObject.Parse(res);

httpwebrequest配合 如下 配置代码,将会提升客户端的并发能力

            ServicePointManager.DefaultConnectionLimit = 1024;//提升系统外联的最大并发web访问数

然后在同样的程序环境中使用,都使用如下task异步线程池的方式调用
            Task.Run(() =>
                {
//上述代码段,其中httpclient需要async修饰符
}
实测效果  httpwebrequest  可以达到4000QPS峰值,2000到3000QPS均值(如果服务器有这么快),相同的访问环境,httpclient只有500平均,800峰值。

结论,httpwebrequest写web客户端或者并发度高的搜索爬虫类软件,效果远好于httpclient。

欢迎批评指正。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
HttpClientHttpWebRequestC#常用的两种用于进行HTTP通信的类,它们都可以用于发送HTTP请求和接收HTTP响应,但在使用上有一些区别HttpClient是在.NET Framework 4.5及以上版本引入的,而HttpWebRequest则是较早的.NET Framework版本就有的。 HttpClient是基于Task的异步模型进行设计的,它提供了一种更简洁、更易用的方式来发送HTTP请求和接收HTTP响应。使用HttpClient,可以通过调用其GetAsync、PostAsync等方法来发送HTTP请求,并通过异步方式获取响应结果。 示例代码如下: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main() { using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync("http://example.com"); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } } } ``` HttpWebRequest则是使用较早的同步模型进行设计的,它提供了更多的灵活性和细粒度的控制。使用HttpWebRequest,可以通过设置请求头、请求方法、请求体等属性来发送HTTP请求,并通过同步方式获取响应结果。 示例代码如下: ```csharp using System;using System.IO; using System.Net; class Program { static void Main() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com"); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseBody = reader.ReadToEnd(); Console.WriteLine(responseBody); } } } ``` 总的来说,HttpClient更加现代化和易用,适用于大多数情况下的HTTP通信。而HttpWebRequest则提供了更多的底层控制能力,适用于一些特殊的需求。开发者可以根据具体的场景选择适合自己的类进行HTTP通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值