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

C#性能:每次重新设置或检查值是否已经正确,只有在值错误时才设置?,c#,performance,C#,Performance,嘿,写这篇文章更有效吗: Method_That_Is_Getting_Repeated() { if(var1 <0) { var2 = 'l'; } else if(var1 >0) { var = 'r'; } } 方法\u,该方法\u正在\u获取\u重复() { if(var10) { var='r'; } } 或者这个: Method_That_Is_Getting_Repeated() { if(var

嘿,写这篇文章更有效吗:

Method_That_Is_Getting_Repeated()
{
   if(var1 <0)
   {
      var2 = 'l';
   }
   else if(var1 >0)
   {
      var = 'r';
   }
}
方法\u,该方法\u正在\u获取\u重复()
{
if(var10)
{
var='r';
}
}
或者这个:

Method_That_Is_Getting_Repeated()
{
   if(var1 <0)
   {
      if(var2 != 'l')
      var2 = 'l';
   }
   else if(var1 >0)
   {
      if(var2 != 'r')
      var = 'r';
   }
}
方法\u,该方法\u正在\u获取\u重复()
{
if(var10)
{
if(var2!=“r”)
var='r';
}
}
在许多情况下,var2已经具有正确的值,因此不必再次设置它


换句话说:if语句的执行时间/性能是否比初始化诸如float、int、char、double、bool之类的变量花费更多/更少?

char
字段重置为相同的值没有危险。这是一个原子操作,简单的操作,无法以有意义的方式观察到。然而,
if
语句是一种分支操作,由于可能出现错误的预测,通常比直接集慢。现在这没什么,我永远不会设计我的程序,但是考虑到将字段设置为相同的值没有真正的缺点,为什么还要麻烦
if

char
字段重置为相同值没有危险。这是一个原子操作,简单的操作,无法以有意义的方式观察到。然而,
if
语句是一种分支操作,由于可能出现错误的预测,通常比直接集慢。现在这没什么,我永远不会设计我的程序,但是考虑到将字段设置为相同的值没有真正的缺点,为什么还要麻烦
if

这些操作将在堆栈上结束,并且速度极快。与应用程序中其他更大的部分相比,性能上的差异可以忽略不计(我敢打赌,在数百万次操作中的毫秒差异大小)。使其尽可能可维护和可读,并在这些行成为性能分析报告的最大违规者后返回重新评估(我向您保证,除非这是您的应用程序真正做的唯一事情,否则它们永远不会成为违规者)。

这些操作将在堆栈上结束,速度极快。与应用程序中其他更大的部分相比,性能上的差异可以忽略不计(我敢打赌,在数百万次操作中的毫秒差异大小)。使其尽可能可维护和可读,并在这些行成为性能分析报告的最大违规者时返回重新评估(我向您保证,除非这是您的应用程序真正做的唯一事情,否则它们永远不会是).

您对重复的
方法的实现
version2在可读性和性能方面都不如version1。我相信分配
char
比比较快


前段时间我做了一些基准测试,结果表明直接分配比比较好。因此,请自己测量您的性能,看看哪个更好。

您对重复的
方法的实现与版本1相比,版本2在可读性和性能方面都很差。我相信分配
char
比比较快


前段时间我做了一些基准测试,结果表明直接分配比比较好。因此,请自己测量性能,看看哪个更好。

第二个选项具有更高的复杂性,因此性能可能会更低。它的可读性也比较差。我不会太担心它,除非它被证明是性能缓慢的一个原因


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


这是应用程序中的瓶颈吗?如果不是,那么就追求可读性。我想说使用If可能会慢一些。不,这不是瓶颈。我只是经常使用这样的代码,并且经常问自己这个问题。这就更有理由使用最明显、可读性最好、最简短的实现。要停止问自己这个问题,请更好地了解哪些因素可能会影响性能,哪些因素最可能不会影响性能;-)这就是我目前正在做的事情:P。我之前认为,if语句将在寄存器中加载一个值,将其与ram中的另一个值进行比较,然后设置一个标志(1或0),这将影响EIP。但我对C语言和汇编语言还很陌生,所以我不确定这是否是应用程序的瓶颈?如果不是,那么就追求可读性。我想说使用If可能会慢一些。不,这不是瓶颈。我只是经常使用这样的代码,并且经常问自己这个问题。这就更有理由使用最明显、可读性最好、最简短的实现。要停止问自己这个问题,请更好地了解哪些因素可能会影响性能,哪些因素最可能不会影响性能;-)这就是我目前正在做的事情:P。我之前认为,if语句将在寄存器中加载一个值,将其与ram中的另一个值进行比较,然后设置一个标志(1或0),这将影响EIP。但是我对C和汇编程序还很陌生,所以我不确定“因为有可能发生错误的预测”-这意味着什么?@WillJenkins CPU可能在分支操作中预测了错误的路径,因此不得不“因为有可能发生错误的预测”将管道重置为总和-这意味着什么?@WillJenkins CPU预测分支操作的错误路径,因此必须将管道重置为总和度的可能性如果您要谈论低级别性能调整,请正确执行。(1) 在这个世界上,堆栈是缓慢的;-)寄存器存储就是它所在的位置。(2) 这取决于
var1