【发布时间】:2014-01-22 14:38:21
【问题描述】:
考虑一下这段代码,它扩展了 Array .NET 类型:
Public Module ArrayExtensions
<System.Runtime.CompilerServices.Extension>
Public Iterator Function ToEnumerable(Of T)(target As Array) As IEnumerable(Of T)
For Each item In target
Yield DirectCast(item, T)
Next
End Function
End Module
我使用它来获得 Min() 和 Max() 扩展方法将采用的结构。数组通常在三个维度上运行到数百万个元素,例如数组T(,,) 很常见。
编辑:具体来说,这个函数通过如下代码行来发挥作用:
Return loadedData(rType).dataArray.ToEnumerable(Of Single).Min
其中dataarray 是(在这种情况下)ConcurrentDictionary loadedData 中的一个值项,并且是Single(,,) 类型
如果没有当前编写的ToEnumerable,则没有可挂钩Max() 扩展函数的IEnumerable 接口。
“并行化”这个函数需要什么?我尝试过的Parallel.For 的任何形式似乎都不起作用,因为loadedData 数组未被识别为IEnumerable 类型。 (这可能是因为 Single(,,) 被处理为值类型吗?)
(没有答案必须用VB,C#也可以!)
【问题讨论】:
-
在我看来你根本不需要这个方法。您可以使用Cast。看来你重新发明了
Cast方法 -
我可能有,但这不是问题所在。问题是:如何并行化?
-
所以你想在不使用 Paralell API 的情况下并行化它吗?
-
@RobPerkins,
ParallelEnumerable.Cast<TResult>怎么样? -
@RobPerkins,不,但您可以使其与
AsParallel()并行...您的代码将变为target.AsParallel().Cast<T>()
标签: .net parallel.foreach parallel-extensions