Parallel.ForEach
是.NET中用于并行处理集合的机制,它属于System.Threading.Tasks命名空间。对于多维数组,由于其特殊的结构,直接使用Parallel.ForEach
需要一些技巧。
int[,] multiDimensionalArray = new int[10, 10];
// 填充数组...
// 转换为锯齿数组
var jaggedArray = new int[multiDimensionalArray.GetLength(0)][];
for (int i = 0; i < jaggedArray.Length; i++)
{
jaggedArray[i] = new int[multiDimensionalArray.GetLength(1)];
for (int j = 0; j < jaggedArray[i].Length; j++)
{
jaggedArray[i][j] = multiDimensionalArray[i, j];
}
}
// 使用Parallel.ForEach处理
Parallel.ForEach(jaggedArray, row =>
{
for (int j = 0; j < row.Length; j++)
{
// 处理每个元素
row[j] = ProcessElement(row[j]);
}
});
int[,] multiDimensionalArray = new int[10, 10];
// 填充数组...
Parallel.For(0, multiDimensionalArray.GetLength(0), i =>
{
for (int j = 0; j < multiDimensionalArray.GetLength(1); j++)
{
// 处理每个元素
multiDimensionalArray[i, j] = ProcessElement(multiDimensionalArray[i, j]);
}
});
int[,] multiDimensionalArray = new int[100, 100];
// 填充数组...
var partitioner = Partitioner.Create(0, multiDimensionalArray.GetLength(0));
Parallel.ForEach(partitioner, range =>
{
for (int i = range.Item1; i < range.Item2; i++)
{
for (int j = 0; j < multiDimensionalArray.GetLength(1); j++)
{
// 处理每个元素
multiDimensionalArray[i, j] = ProcessElement(multiDimensionalArray[i, j]);
}
}
});
AggregateException
处理并行操作中的异常多维数组不直接实现IEnumerable<T>
接口,而Parallel.ForEach
需要处理IEnumerable<T>
集合。因此需要先将多维数组转换为可枚举的形式或使用Parallel.For
替代。
没有搜到相关的文章