N_A*_*N_A 3 f# array-initialization
F#
[|for index in 1 .. items.Count()-1 -> (* create object here - complex operations *)|]
Run Code Online (Sandbox Code Playgroud)
C#
Object[] newItemArray= new Object[items.Count];
Parallel.For(0, items.Count, index=>
{
/*complex stuff here*/
newItemArray[index] = new Object();
});
Run Code Online (Sandbox Code Playgroud)
我有上面的C#和F#做同样的事情.没有Parallel.ForF#稍微快一些.使用Parallel.ForC#需要执行一半的时间.如何正确并行化F#以获得与C#相同的性能提升?
我到目前为止尝试的方式是Array.Parallel.Iteri,所以我可以使用相同的索引到我在C#中使用的数组技巧,但它减慢了它而不是加速它.
编辑:
关于我正在做什么的更多细节:
我有一个可枚举的byte array array array.我有另一个byte array array array我正在比较其他人.我正在对可比较的%相似性进行排序并返回前500个.
在F#和C#中我都在做一个简单的嵌套for循环,它增加了一个计数器.完成循环遍历我的枚举中的特定项目时,我创建了一个元组(项目,计数器).一旦完成创建我的新枚举(项目,计数器),我在计数器变量上排序,抓住前500,然后转换回只是一个可枚举的项目.
我在Parallel.For中放置的部分是创建的 IEnumerable<Tuple<item, int>>
Array.Parallel.init items.Count (fun index ->
(* create object here - complex operations *))
Run Code Online (Sandbox Code Playgroud)