gpt4 book ai didi

c# - ? : Operator Vs. If语句性能

转载 作者:IT王子 更新时间:2023-10-29 04:05:18 26 4
gpt4 key购买 nike

我一直在努力优化我的代码,使其更加简洁和可读,并希望这样做不会导致性能下降。我认为我的更改可能会减慢我的申请速度,但它可能只是在我的脑海中。之间是否存在任何性能差异:

Command.Parameters["@EMAIL"].Value = email ?? String.Empty;

Command.Parameters["@EMAIL"].Value = (email == null) ? String.Empty: email;

if (email == null)
{
Command.Parameters["@EMAIL"].Value = String.Empty
}
else
{
Command.Parameters["@EMAIL"].Value = email
}

为了可读性,我更喜欢 null 合并运算符,我只是不希望它影响性能。

最佳答案

您正在尝试 micro-optimize在这里,这通常是一个很大的禁忌。除非您有性能分析表明这是一个问题,否则它甚至不值得更改。

对于一般用途,正确答案是更易于维护的答案。

尽管如此,空合并运算符的 IL 是:

L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: dup
L_0007: brtrue.s L_000f
L_0009: pop
L_000a: ldsfld string [mscorlib]System.String::Empty
L_000f: stloc.0

开关的 IL 是:

L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: brfalse.s L_000f
L_0008: ldsfld string ConsoleApplication2.Program::myString
L_000d: br.s L_0014
L_000f: ldsfld string [mscorlib]System.String::Empty
L_0014: stloc.0

对于null coalescing operator ,如果值为 null,则执行六个语句,而对于 switch , 执行了四个操作。

在非 null 值的情况下,null 合并运算符执行四项操作而不是五项操作。

当然,这是假设所有 IL 操作花费相同的时间,但事实并非如此。

无论如何,希望您能看到在这个微观尺度上的优化如何开始迅速减少返回。

话虽这么说,但在大多数情况下,在这种情况下,最容易阅读和维护的就是正确的答案。

如果您发现自己在大规模执行此操作时被证明效率低下(而且这种情况很少见),那么您应该衡量一下,看看哪个性能更好,然后进行特定的优化。

关于c# - ? : Operator Vs. If语句性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547249/

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