次数百万级数据提交如何增加性能以及时效

Let's GO GO GO 2021-03-03 01:38:24
我想提交数据很多次。但单次的数据不大,几个字节。
比如我POST或者GET 一个地址
http://www.abc.com/xxx
内容是1到100万。
这样就会提交一百万次。
我使用的webclient 用GET测试
http://www.abc.com/xxx?value=1
但是我加了100个线程。执行完也要5-8个小时。
有什么办法可以加快这个时间的方法。
带宽和电脑 不计算在内。这个我知道尽量最好的。
就是把100万次的请求,用最短的时间请求完成。
如何办到。或者好的方法
...全文
543 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Let's GO GO GO 2021-03-20
  • 打赏
  • 举报
回复
new100万次 但每次都关闭了 和new1次 提交 100万次性能多大区别
dy2017 2021-03-15
  • 打赏
  • 举报
回复
websocket
ziqi0716 2021-03-12
  • 打赏
  • 举报
回复
数据合并,压缩.这一步可以至少减少1000倍的客户端请求及服务器压力. 如果还不行,上消息队列,分布式等. 其实还是要考虑具体业务,优化方向有很多,不同业务场景处理方法也不同,有的可能就是一行代码就能搞定,有的需要搭建庞大的系统架构来应对.
by_封爱 版主 2021-03-12
  • 打赏
  • 举报
回复
大家还考虑什么"服务器性能",人家肯定是要"使坏"...
YBcsdn1996 2021-03-11
  • 打赏
  • 举报
回复
我做过类似测试 要考虑服务器的吞吐量 不能阻塞 线程的个数不是越多越好 一般都是异步 队列处理 分割数据 合并数据 如果你说你的数据很小 那么可以先试着合并数据 到一定量再提交到服务器处理
wanghui0380 2021-03-10
  • 打赏
  • 举报
回复
另一个问题是,考虑服务器的承受能力。 你一次喂太多他消化不了,就会慢点嚼,就会要喝点水歇会,要吐。所以要想快,就的在他可以承受的范围,持续稳定输出,而不是硬塞
wanghui0380 2021-03-10
  • 打赏
  • 举报
回复
1.全局使用相同的httpclient实例,不要每次重新new,因为他会保持相同sokect,无需每次重新发起连接 2.如果使用netcore的,可以使用httpclientFactory 做(原因我就不说了,网上有很多说明) 3.如果使用netcore以下的,可以自己做个httpclientFactory,如果不知道怎么做,可以去nuget上查 ps:没有代码谈优化?谈方案?我们怎么会知道你到底怎么写的哦,只能猜你大概,可能也许new了100w个webRequest
  • 打赏
  • 举报
回复
如果只是提交数据,不做操作,服务器内存够的情况下,应该是没有问题的,感觉你这一百万次提交是不是应用服务器还要处理数据啊 如果你这提交量很大接收的接口就不要做逻辑了,就正则判断数据对不对,然后就多线程更新到数据库。 使用中间表的形式去做,如何去处理这个数据可以使用存储过程方式去做,那样的话应用服务器的压力会少很多,数据库服务器就可以起到很好的作用了
正怒月神 2021-03-04
  • 打赏
  • 举报
回复
异步试过了吗?
public static async Task<string> APIPost(string url, string data)
        {
            string result = string.Empty;
            //设置HttpClientHandler的AutomaticDecompression
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            //创建HttpClient(注意传入HttpClientHandler)
            using (var http = new HttpClient(handler))
            {
                //使用FormUrlEncodedContent做HttpContent
                var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
                {
//传递单个值
                  {"", data}//键名必须为空
//传递对象
//{"name","hello"},
//{"age","16"}
                 });
 
                //await异步等待回应
                var response = await http.PostAsync(url, content);
                //确保HTTP成功状态值
                response.EnsureSuccessStatusCode();
                //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                result = await response.Content.ReadAsStringAsync();
            }
            return result;
        }
Let's GO GO GO 2021-03-03
  • 打赏
  • 举报
回复
引用 5 楼 大西瓜大降价一块一斤的回复:
[quote=引用 4 楼 Let's GO GO GO 的回复:][quote=引用 3 楼 much0726的回复:]如果对反馈的结果要求不严格,可以用 多线程+异步POST,就是客户端只管发,回馈的丢异步处理。
如何在短时间内完成大量请求 比如get一百万次[/quote] 下个Jmeter,专门用来压力测试的[/quote] jmeter好像可以达到效果 不知道能否顺序循环及短时间完成大量请求
  • 打赏
  • 举报
回复
引用 4 楼 Let's GO GO GO 的回复:
[quote=引用 3 楼 much0726的回复:]如果对反馈的结果要求不严格,可以用 多线程+异步POST,就是客户端只管发,回馈的丢异步处理。
如何在短时间内完成大量请求 比如get一百万次[/quote] 下个Jmeter,专门用来压力测试的
Let's GO GO GO 2021-03-03
  • 打赏
  • 举报
回复
引用 3 楼 much0726的回复:
如果对反馈的结果要求不严格,可以用 多线程+异步POST,就是客户端只管发,回馈的丢异步处理。
如何在短时间内完成大量请求 比如get一百万次
much0726 2021-03-03
  • 打赏
  • 举报
回复
如果对反馈的结果要求不严格,可以用 多线程+异步POST,就是客户端只管发,回馈的丢异步处理。
datafansbj 2021-03-03
  • 打赏
  • 举报
回复
你是想测试服务器的会话能力吗?使用一个客户端来模拟多个会话,达不到服务器的压力测试水平,因为客户端开启会话的能力有限,比不上服务器。
肖无疾 2021-03-03
  • 打赏
  • 举报
回复
改了maxconnection没有?

  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="1024" />
    </connectionManagement>
  </system.net>

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧