如何在 parallel.for 上传递不同的范围?
How to pass different range on parallel.for?
我需要通过发送跳过计数来并行处理单个文件,例如 1-1000、1001-2000、2001-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
}
如何根据我的要求并行发送 skip
和 take
计数?
您可以使用 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
}
我需要通过发送跳过计数来并行处理单个文件,例如 1-1000、1001-2000、2001-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
}
如何根据我的要求并行发送 skip
和 take
计数?
您可以使用 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
}