首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行或异步执行过程

并行或异步执行过程
EN

Software Engineering用户
提问于 2016-08-27 11:29:15
回答 3查看 802关注 0票数 0

我继承了一个应用程序,它在针对Server的C# for-循环中执行大约100,000次。

代码语言:javascript
复制
for (int i=0; i<100000; i++)
{
  //Execution can take 0.250 to 5 seconds to complete.
  ExecuteProc(i); // no result returned
}

为了减少执行所有100 000个程序所需的时间,最好是:

  1. 将此循环转换为.Net并行-foreach循环或
  2. 异步执行过程?
EN

回答 3

Software Engineering用户

发布于 2016-08-27 13:32:37

感觉就像你在试图修复错误的东西。为什么您有100,000次(或者执行相同的一组100,000次)。我敢打赌,只要编写一些更好的SQL,而不需要这种疯狂,就可以解决这个问题。

还有..。如果执行顺序重要,那么并行/异步方法是个坏主意。如果命令重要..。你不能这么做。

票数 3
EN

Software Engineering用户

发布于 2016-08-28 00:55:15

您应该尝试将循环推入数据库。

将数据库驱动到外部并行执行100,000个操作可能会破坏数据库,而且它很可能不具备以任何合理的方式修复它的知识,因为它没有机会看到更大的问题。

如果您可以将循环推入数据库中,它将(1)最小化往返开销,(2)让数据库有机会看到您要求它解决的问题的全部大小,因此可能会想出一种方法,在这个较大的问题上并行化或使用多个线程。

(我们不知道ExecuteProc做了什么,但如果我们知道了,可以用一个不同的、可能更大、更复杂的存储过程来消除100,000次运行。)

票数 2
EN

Software Engineering用户

发布于 2016-08-27 12:15:31

ExecuteProc是异步调用吗?如果您正在执行IO (而且web请求是IO),那么生成一个bajillion线程,每个线程都等待同步操作,只是冒着捆绑所有线程的风险,这样它们就无法完成有用的工作。他们都会一直睡到通话结束。

如果您可以访问异步api,那么线程的数量并不是非常重要,因为向SQL服务器发送查询几乎不需要任何CPU工作。

如果您只有一个同步api,那么并行化可以加快速度,但它将需要更多的资源。试一试你的选择,衡量什么最适合你。只有你知道自己的局限性。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/329499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档