• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

我有一个集合,里面数据在10万条左右

低调点没事 低级程序猿  2020-12-16 11:35:24
我现在需要对这些数据做一次数据验证。
所以我需要请求一个接口,接口是第三方提供的,接口响应时间在2s左右。
那么我要处理这批数据,我怎么样能尽快完成呢?
能想到就是用Task,进行多任务操作,但有点想不通该控制用多少个Task.
...全文
271 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-12-16
数据验证看对方的,不看你的。 看对方接口允许你是一条一条,还是一批一批。 看对方允许你的访问频次和数据大小。 假设你1条1条提交,假设你的网络够快,你一次并行提交1w,对方扛得住,有啥问题?? 对于你来说,我们考虑得根本就不是啥task,我们考虑的是池。不管你的机器,还是他的机器。只要任何一方都扛不住,那就修改池大小
回复
glb21 2020-12-16
让对方开放数据库接口,你使用多线程并发,能快不少。
回复
wanghui0380 2020-12-16
你这个主要是IO密集。 3个因素 1.内存io:你自己的内存是否扛得住,扛不住需要池化 2.网络io:网络上行速率,你最大上行就那么大,你在并行也还只有那么大,并且并行过多会网络拥堵会产生超时,所以还是池化httpclient,当然net现在自己有个httclientfactory是自己池化的 3.对方处理能力,他处理不了你过多的请求,你并行发在多也木用。反而容易造成对方宕机或者惩罚性限流 4.异常处置,网络IO总会有异常的,所以你的重试策略(比如指数退避重试),熔断策略,注意在有大规模异常重试的情况下不要在继续往上堆请求,那样做只会加大撕扯“伤口” 总体上我们需要的是个池
回复
低调点没事 2020-12-16
引用 2 楼 正怒月神 的回复:
你拿到数据,需要2s,然后目前自己处理数据需要多少s?
目前只是取出数据了,代码现在只有主线程,计算下时间也要两天。 太慢了太慢了,而且每天都要跑一遍 就想着优化的,能想到的就是Task.。。上面回复告诉我要好像不是那么回事。。。 目前用了Parallel.Foeach。。。集合拆成了每次200条。。。不知道时间快不快。我先去测试下看看。
回复
低调点没事 2020-12-16
谢谢。看样子想差了。。
回复
正怒月神 2020-12-16
你拿到数据,需要2s,然后目前自己处理数据需要多少s?
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2020-12-16 11:35
社区公告

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