gpt4 book ai didi

c# - 嵌套列表的并行填充

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:15 25 4
gpt4 key购买 nike

下面的代码似乎可以工作——也就是说,用增量整数的子列表填充外部列表。

我只是幸运吗?

我很小心地预先分配“槽”,而不是交叉。

class Program
{
static List<List<int>> allLists;

static void Main(string[] args)
{
allLists = new List<List<int>>(553);

for (int i = 0; i < 553; i++)
{
allLists.Insert(i, new List<int>());
}

Enumerable.Range(0, 552).AsParallel().ForAll((i) => InsertRange(i));
}

static void InsertRange(int index)
{
allLists[index] = Enumerable.Range(0, 7205).ToList();
}
}

是否存在一个列表会破坏另一个列表的危险?

最佳答案

并行访问数组的不同部分在 .Net 中是线程安全的。自 List<T>由数组支持,我认为您的代码也应该是线程安全的。

但我认为你把事情复杂化了。您可以使用 PLINQ 生成所有内部列表,然后使用 ToArray()创建最终数组(或 ToList() ,如果你真的想创建 List<T> )。由于 PLINQ 有自己的 Range() 版本和 ToArray() (和 ToList() ),我相信这也会更有效率。

所以,我会像这样重写你的代码:

allLists = ParallelEnumerable.Range(0, 552)
.AsOrdered()
.Select(i => Enumerable.Range(0, 7205).ToList())
.ToArray();

当然,只有当并行创建内部列表实际上会加速您的代码时,这一切才有意义,但您必须自己衡量这一点。

关于c# - 嵌套列表的并行填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299719/

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