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秒之间两者之间的差异那么大.
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)
我见过人们做的比上面的情况差很多.我认为他们应该放弃他们的三元特权!