【发布时间】:2010-11-02 12:25:01
【问题描述】:
有没有办法将 PLINQ 查询的线程“索引”传递给它的一个运算符,如 Select?
背景是我有一个 PLINQ Query 进行一些反序列化,反序列化方法使用一个结构(可能是一个数组)将数据传递给另一个方法:
ParallelEnumerable.Range(0, nrObjects)
.WithDegreeOfParallelism(8)
.Select(i => this.Deserialize(serializer, i, arrays[threadIndex]))
.ToList();
(threadIndex 是我想要的新变量)
如果我知道线程索引,我可以预先创建 8 个这样的数组(即使所有可能都不会使用)并重用它们。反序列化方法可能会被调用数百万次,因此每个小的优化都很重要。
【问题讨论】:
-
我不明白你为什么不能使用
i?它将在计算中是唯一的 -
@Andrey - 如果我的意图正确,他希望安全地重新使用少量工作缓冲区进行操作。
-
@Marc Gravell♦ 你是对的,我仔细阅读了问题
-
是的,完全正确:) 在这里缓冲区可能是错误的词,它只是一个小数组,正如我所说的,微优化