三元?运算符与c#中的常规If-else运算符

Par*_*ras 35 c# if-statement ternary-operator

可能重复:
条件运算符是否缓慢?

我是?C#运营商的大量用户.然而,我的项目经理经常警告我,?If-Else大规模应用程序中的语句相比,使用运算符可能会花费一些性能.所以我被告知要避免使用它.但是,我喜欢使用它,因为它简洁而且保持代码清洁.

使用?运营商时会有这样的性能开销吗?

mat*_*ewr 103

我运行了1亿个三元运算符和1亿个If-Else语句,并记录了每个语句的性能.这是代码:

Stopwatch s = new Stopwatch();
// System.Diagnostics Stopwatch
int test = 0;
s.Start();
for(int a = 0; a < 100000000; a++)
    test = a % 50 == 0 ? 1 : 2;
s.Stop();

s.Restart();
for(int b = 0; b < 100000000; b++)
{
    if(b % 50 == 0)
        test = 1;
    else
        test = 2; 
}
s.Stop();
Run Code Online (Sandbox Code Playgroud)

结果如下(在Intel Atom 1.66ghz上运行,1gb内存,我知道,它很糟糕):

  • 三元运算符:每个运算符5986毫秒或0.00000005986秒.

  • If-Else:每个语句5667毫秒或0.00000005667秒.

不要忘记我跑了1亿,而我不认为0.00000000319秒之间两者之间的差异那么大.

  • 这些统计数字为+1. (25认同)
  • 看到这个答案我忍不住笑了! (3认同)
  • 我爱你实际上做到了! (2认同)
  • 我得到了完全相反的结果。三元运算符的运行速度提高了 2.6 倍。我测试了相同的代码。我的结果是:三元为 185 毫秒,if-else 语句为 495 毫秒 (2认同)

Ant*_*lls 22

没有.

使用使您的代码可读的原因.如果if声明这样做,请使用它们.如果三元运算符这样做,请使用它们.

无论如何,两者都可能会编译成相同的IL.

在任何情况下,会降低应用程序速度的事情可能是数据库或网络或硬盘驱动器......除了使用if语句或三元表达式之外的任何事情.


jah*_*roy 16

没有理由期望性能有任何差异.

在我看来,只有当所有三个操作数都非常简洁易读时,才应使用三元运算符.否则我认为它有可能使代码更难阅读.

我认为很多人通过将过多的逻辑干扰到一长串代码中而误用了这个算子.除非整行不超过80个字符,否则我个人不会使用它.

好:

return isFunky ? funkyValue : null;

坏:

return (thisThing == thatThing && (anotherThing != null || ! IsThisTrue())) ? someThing.GetThis().GetThat() : yetAnotherThing.GetBlah().GetFoo();
Run Code Online (Sandbox Code Playgroud)

我见过人们做的比上面的情况差很多.我认为他们应该放弃他们的三元特权!

  • 如果你实际上将它写在 3 个不同的行上,那么“坏”的例子并没有那么糟糕。第一行表示条件,第二行以“?”开头 以及以“:”开头并以“;”结尾的纬度行 (2认同)

小智 6

阅读三元操作非常困难.如果使用嵌套条件,理解三元将成为开销.如果有更多的条件,尽量避免三元组.