Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/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# 如何通过不同范围的并行。为?_C#_Parallel Processing_Plinq_Parallel Extensions - Fatal编程技术网

C# 如何通过不同范围的并行。为?

C# 如何通过不同范围的并行。为?,c#,parallel-processing,plinq,parallel-extensions,C#,Parallel Processing,Plinq,Parallel Extensions,我需要通过发送skip-take count(如1-1000、1001-20002001-3000等)并行处理单个文件 并行处理代码 var line = File.ReadAllLines("D:\\OUTPUT.CSV").Length; Parallel.For(1, line, new ParallelOptions { MaxDegreeOfParallelism = 10 }, x => { DoSomething(skip,take); });

我需要通过发送skip-take count(如1-1000、1001-20002001-3000等)并行处理单个文件

并行处理代码

var line = File.ReadAllLines("D:\\OUTPUT.CSV").Length;
Parallel.For(1, line, new ParallelOptions { MaxDegreeOfParallelism = 10 }, x              
=> {
  DoSomething(skip,take);
});
作用

public static void DoSomething(int skip, int take)
{
     //code here
}

如何按照我的要求在并行过程中发送
跳过
进行计数?

使用PLINQ您可以很容易地完成这些操作。如果希望批量为1000,可以执行以下操作:

const int BatchSize = 1000;

var pageAmount = (int) Math.Ceiling(((float)lines / BatchSize));
var results = Enumerable.Range(0, pageAmount)
                        .AsParallel()
                        .Select(page => DoSomething(page));

public void DoSomething(int page)
{
    var currentLines = source.Skip(page * BatchSize).Take(BatchSize);
    // do something with the selected lines
}

谢谢,但是
Enumerable.Range(1,pageAmount)
应该是
Enumerable.Range(0,pageAmount-1)
对吗?在方法
DoSomething
中,我们第一次只得到page=1,对吗?因此
source.Skip(page*BatchSize).Take(BatchSize)
将成为source.Skip(1000).Take(1000)。因此,第一次它本身将跳过1000行hanks,我认为需要更改结束范围,即
pageAmount
pageAmount-1
我们跳过4000行,然后取1000行,这意味着我们取的是最后一批,即4001-5000行,因此它应该
pageAmount-1
我无法理解你的观点,行数=5000,然后pageAmount=5,它从0开始迭代,5-1意味着总共5次迭代,即0,1,2,3,4,因此每次迭代上的行过程是1-10001001-20002001-300011-40004001-5000,因此所有行都被处理,如果我错了,请纠正我。