来自 LINQ 的 List.AddRange 结果用 AsParallel() 标记

考虑以下示例。

result.AddRange(
    data.AsParallel()
        .Where(cs => cs is internalHistorySet)
            .Select(matchingItem => new History(source, (internalHistorySet)matchingItem)));

我对代码有两个问题:

  1. only会AsParallel()影响查询本身吗?IMO 如果这些项目被并行添加,因为AddRange只需要一个IEnumerable. 我理解代码的方式是它只是并行执行查询,这意味着查询本身可能比不使用 AsParallel 更快。但是,AddRange其本身的性能不会改变,因为它不受影响。

  2. 立场重要吗AsParallel()?如果放在查询的末尾,结果会一样吗?

问候和感谢


一只名叫tom的猫
浏览 109回答 1
1回答

SMILET

AsParallel() 只影响查询本身吗?是的。但是,AddRange 本身的性能不会改变,因为它不受影响。正确的。我的意思是,AddRange 可能需要更长的时间,但那是因为 LINQ 查询以不同的方式提供可枚举(正在迭代)。性能差异是由于 LINQ 查询而不是AddRange其本身造成的。如果放在查询的末尾,结果会一样吗?AsParallel如果放在最后就没有任何意义了。只影响LINQ 查询中它后面的AsParallel内容。之后什么都没有==毫无意义。
打开App,查看更多内容
随时随地看视频慕课网APP