Ternary?运营商VS传统的if-else运营商在C#

问题描述:

可能重复:
Is the conditional operator slow?Ternary?运营商VS传统的if-else运营商在C#

我在C#中?运营商的海量用户。然而,我的项目经理经常警告我说,与大规模应用中的If-Else报表相比,使用?运营商可能会花费一些性能。所以我被告知要避免使用它。不过,我喜欢使用它,因为它简洁明快,并且保持代码清洁。

使用?运算符时是否有这样的性能开销?

+0

你可以在这里得到很好的答案...在这 http://*.com/questions/3312786/benefits-of-using-the-conditional-ternary-operator – 2012-07-25 05:15:35

+0

请考虑阅读此线程:http ://*.com/questions/2259741/is-the-conditional-operator-slow。恕我直言,你的经理是暧昧的 – 2012-07-25 05:16:53

+0

我不认为其他链接的问题解决假设的性能开销(我不知道它会从哪里来)。 – Thilo 2012-07-25 05:20:54

我跑了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(); 

这是结果(运行在英特尔凌动1。66GHz的有1GB RAM和我知道,它吮吸):

  • 三元运营商:5986毫秒或每各运营商0.00000005986秒。

  • If-Else:每条语句5667毫秒或0.00000005667秒。

别忘了我跑了1亿,而且我觉得这两个事情差不多0.00000000319秒之差。

+12

这些统计数据。 – 2012-07-25 05:46:14

+1

我爱你实际上做到了! – 2017-08-15 18:27:24

编号

使用什么让你的代码可读。如果if语句这样做,请使用它们。如果三元操作员这样做,使用它们。

无论如何,它们很可能会编译到同一个IL。

在任何情况下,会减慢你的应用程序的东西可能是数据库或网络或硬盘驱动器......除了你是否使用if语句或三元表达式。

从我个人的角度来看,我没有看到三元运算符和if语句之间的任何性能差异。许多编程语言都支持它,并且十进制运算符更像开发人员友好的,与传统的If-else运算符一般可以理解。

http://en.wikipedia.org/wiki/%3F%3a

没有理由期待在性能上有什么区别。

在我看来,三元运算符只能用于三个操作数都非常简洁易读的情况。否则,我认为它有可能使代码难以阅读。

我认为很多人通过将太多逻辑干扰到一长串代码中来误用这个操作符。除非整行少于80个字符,否则我个人不会使用它。

好:

return isFunky ? funkyValue : null;

坏:

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

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

这很难读取三元操作。如果你使用嵌套条件,理解三元将成为开销。如果有更多的条件,尽量避免三元。