Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Parallel.ForEach在不破坏程序顺序的情况下实现并行_C#_Asynchronous_Parallel Processing - Fatal编程技术网

C# 使用Parallel.ForEach在不破坏程序顺序的情况下实现并行

C# 使用Parallel.ForEach在不破坏程序顺序的情况下实现并行,c#,asynchronous,parallel-processing,C#,Asynchronous,Parallel Processing,我正在努力使我的C#应用程序尽可能快地运行 我没有访问应用程序源代码的权限,但允许它使用C#进行扩展,所以我正在这样做。我不知道这是否有什么区别 此外,它必须每秒运行10次以上。性能对我来说非常重要,所以我决定使用Parallel.ForEach() 如何定义一个顺序(我不是说数组的原始顺序),这样事情就不会变得复杂? 这是我的密码: string[] MyThings = {}; // There are 300 names in this array. System.Threading.T

我正在努力使我的C#应用程序尽可能快地运行

我没有访问应用程序源代码的权限,但允许它使用C#进行扩展,所以我正在这样做。我不知道这是否有什么区别

此外,它必须每秒运行10次以上。性能对我来说非常重要,所以我决定使用
Parallel.ForEach()

如何定义一个顺序(我不是说数组的原始顺序),这样事情就不会变得复杂?

这是我的密码:

string[] MyThings = {}; // There are 300 names in this array.

System.Threading.Tasks.Parallel.ForEach(MyThings, Thing => {
  var LastStatus = AppLib.FetchNode(Thing); 
  // First step. AppLib.FetchNode() sends my Node.js server a request,  
  // Node.js accesses MySQL and returns a response.

  // Second step. I access application specific data here using LastStatus value, 
  // but it shouldn't run before the first step is finished.

  var SendStatus = AppLib.SendNode(data1, data2, data3);
  // Third and last step. SendNode() sends some data to my Node.js server, 
  // but it shouldn't run before the second step is finished.
});

如果有订购要求,它可能是不可并行的。@PeterRitchie,谢谢!我要找的术语是什么?你的问题是“我从亚马逊订购了300本书,我想让它们更快到达,所以我雇佣了20名职员等待书籍到达。这将使它们到达的速度加快20倍,对吗?”如果工作是“阅读这300本书”,那么雇佣20人可以使工作完成的速度加快20倍。但是,如果工作是“等待他们到来”,那么雇佣更多的人来等待并不能让东西更快到达。换句话说,并行性是关于提高处理器限制问题的性能。异步工作流是关于在IO限制的问题中提高处理器利用率的。这两种方法都不能使网卡或数据库服务器更快地工作,当然也不能提高信号在铜线中传播的速度。@salep我们没有足够的信息知道这个问题的答案。如果有订购要求,它可能无法并行。@PeterRitchie,谢谢!我要找的术语是什么?你的问题是“我从亚马逊订购了300本书,我想让它们更快到达,所以我雇佣了20名职员等待书籍到达。这将使它们到达的速度加快20倍,对吗?”如果工作是“阅读这300本书”,那么雇佣20人可以使工作完成的速度加快20倍。但是,如果工作是“等待他们到来”,那么雇佣更多的人来等待并不能让东西更快到达。换句话说,并行性是关于提高处理器限制问题的性能。异步工作流是关于在IO限制的问题中提高处理器利用率的。两者都不能使网卡或数据库服务器更快地工作,当然也不能提高信号在铜线中传播的速度。@salep我们没有足够的信息知道这个问题的答案。