C#性能:每次设置或检查值是否已经正确,只有设置错误?

时间:2014-01-22 15:35:54

标签: c# performance

嘿,写这个是否更高效:

Method_That_Is_Getting_Repeated()
{
   if(var1 <0)
   {
      var2 = 'l';
   }
   else if(var1 >0)
   {
      var = 'r';
   }
}

或者这个:

Method_That_Is_Getting_Repeated()
{
   if(var1 <0)
   {
      if(var2 != 'l')
      var2 = 'l';
   }
   else if(var1 >0)
   {
      if(var2 != 'r')
      var = 'r';
   }
}

在许多情况下,var2已经具有正确的值,因此不必再次设置它。

换句话说:if语句的执行时间/性能是否比初始化一个变量(如float,int,char,double,bool)要多/少?

4 个答案:

答案 0 :(得分:3)

char字段重置为相同值没有危险。这是一个原子操作,简单的操作,无法以有意义的方式观察到。 if语句虽然是一个分支操作,但由于预测错误的可能性, genarally 说话比直接设置慢。现在这不是我永远不会设计我的程序,但鉴于将字段设置为相同值没有真正的缺点,为什么还要费心if呢?

答案 1 :(得分:1)

这些操作将最终进入堆栈并且快速闪电。与应用程序的其他较大部分相比,性能差异可以忽略不计(与我打赌的数百万次操作相差几毫秒)。尽可能保持可读性和可读性,并在这些行成为性能分析报告的最大违规者后返回重新评估(我向他们保证,除非这确实是您的应用程序所做的唯一事情)。< / p>

答案 2 :(得分:0)

在版本1中,Method_That_Is_Getting_Repeated版本2的实现在可读性和性能方面都很差。我认为分配char比比较它更快。

前段时间我做了一些基准测试,这表明我直接分配比比较更好。因此,请自行衡量您的表现,看看哪个更好。

答案 3 :(得分:0)

第二种选择具有更高的复杂性,因此可能性能较差。它的可读性也较差。我不会担心它,除非它被证明是导致性能缓慢的原因。

http://en.wikipedia.org/wiki/Cyclomatic_complexity