gpt4 book ai didi

C# IL 代码优化 : conditional operator (? :) 和相同变量的重新分配

转载 作者:可可西里 更新时间:2023-11-01 08:47:38 26 4
gpt4 key购买 nike

我在阅读 C# 7.0 变更日志时遇到了一个显示新元组语法的示例。

private static (int Max, int Min) Range(IEnumerable<int> numbers)
{
int min = int.MaxValue;
int max = int.MinValue;
foreach(var n in numbers)
{
min = (n < min) ? n : min;
max = (n > max) ? n : max;
}
return (max, min);
}

我很好奇编译器是否优化了像 min = (n < min) ? n : min; 这样的行原因min = min操作好像有点没用。我编译代码(在 Release模式下)并在 ILDASM 中打开它,看到 min = min任务仍然存在。

编译器跳过赋值是不是一个棘手的问题?或者可能是因为一些多线程问题?

最佳答案

条件运算符的工作方式是您总是得到一个赋值,因为编译器总是期望在“=”之后有一个值。当然,可以编写编译器来检查左侧和右侧是否相同,考虑到在大多数情况下 min = min 的情况不太可能发生,这只会导致额外的检查并在 99.9% 的情况下减慢执行速度。

决定何时使用条件运算符或简单的 if 是程序员的工作

int min = int.MaxValue;
int max = int.MinValue;
foreach(var n in numbers)
{

if(n < min) min = n;
if(n > max) max = n;
}

这种情况下可以避免 min = min 赋值。

关于C# IL 代码优化 : conditional operator (? :) 和相同变量的重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297908/

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