gpt4 book ai didi

c# - 给定以下 linq 查询,哪一个是 'more performant' ?

转载 作者:行者123 更新时间:2023-11-30 15:34:26 25 4
gpt4 key购买 nike

给定以下包含一些 linq 的 for each 语句,我需要以 Distinct 的形式遍历列表。所以我有很多地方可以添加 Distict() 语句。

谁能解释一下我应该使用哪种解决方案以及为什么?我对使用 AsParallel() 很陌生,所以我不确定要使用哪种解决方案..

现有代码(缺少并需要 Distinct())

foreach (var phrase in (something != null 
? ListOne.AsParallel()
: ListTwo.AsParallel()))
{
... // irrelevant for this question
}

选项 1:区分整个结果。

foreach (var phrase in (something != null 
? ListOne.AsParallel()
: ListTwo.AsParallel()).Distinct())
{
... // irrelevant for this question
}

我觉得这会返回太多信息(最初)。

选项 2:在并行之前区分每个列表

foreach (var phrase in (something != null 
? ListOne.Distinct().AsParallel()
: ListTwo.Distinct().AsParallel()))
{
... // irrelevant for this question
}

选项 3:在并行之后区分每个列表

foreach (var phrase in (something != null 
? ListOne.AsParallel().Distinct()
: ListTwo.AsParallel().Distinct() ))
{
... // irrelevant for this question
}

是的——我可以用秒表等创建我自己的测试代码。但我不是很在意指标,而是更多的是理论(关于我应该做什么……因为 XXXXX)。

** 在这变成一个主观问题并被关闭之前,请考虑您的答案。** 其次,我知道这里的性能很小..所以只是为了迭代,我不太担心 -actual-perf 差异,而是理论差异。

最佳答案

选项 1 和 3 将产生相同的执行路径。在这两种情况下,Distinct 都是在 AsParallel 的结果上调用的。这意味着问题实际上归结为是在 AsParallel() 之前还是之后调用 Distinct 更好。

基于ParallelEnumerable.Distinct()的实际执行它只是使用非并行 Enumerable.Distinct 我会说它对你的情况没有任何影响,因为你实际上没有在这里查询。您只是在区分现有列表。您可能根本不应该在这里使用 AsParallel

如果您确实有一个查询,最后调用 Distinct 可能会更好,因为它不会并行执行,如果在较小的集合上执行可能会更快 - 它有被并行过滤。但这部分答案需要实际对标来验证。

关于c# - 给定以下 linq 查询,哪一个是 'more performant' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139703/

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