gpt4 book ai didi

f# - 并行化数组创建

转载 作者:行者123 更新时间:2023-12-01 05:37:46 25 4
gpt4 key购买 nike

F#

[|for index in 1 .. items.Count()-1 -> (* create object here - complex operations *)|]

C#

Object[] newItemArray= new Object[items.Count];

Parallel.For(0, items.Count, index=>
{
/*complex stuff here*/
newItemArray[index] = new Object();
});

我有上面的 C# 和 F# 做同样的事情。没有 Parallel.For F# 稍快一些。与 Parallel.For C# 需要一半的时间来执行。如何正确并行化 F# 以获得与 C# 相同的性能提升?

到目前为止我尝试过的方法是Array.Parallel.Iteri ,因此我可以在 C# 中使用的数组技巧中使用相同的索引,但它会减慢而不是加快速度。

编辑:

关于我在做什么的更多细节:

我有一个可枚举的 byte array array array .我还有一个 byte array array array我正在与其他人进行比较。我正在对可枚举的 % 相似度进行排序并返回前 500 个。

在 F# 和 C# 中,我都在做一个简单的嵌套 for 循环,它会增加一个计数器。当循环遍历我的可枚举中的特定项目时,我创建了一个 (item, counter) 的元组。完成创建新的 (item, counter) 可枚举项后,我对 counter 变量进行排序,获取前 500 个,然后转换回仅可枚举的项目。

我放入 Parallel.For 的部分是创建 IEnumerable<Tuple<item, int>>

最佳答案

Array.Parallel.init items.Count (fun index ->
(* create object here - complex operations *))

官方文档:Parallel.init<'T> Function (F#)

关于f# - 并行化数组创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com