C#if-else vs-if或vs-switch case

C#if-else vs-if或vs-switch case,c#,if-statement,case,C#,If Statement,Case,我试图使我的代码更快,我得到了很多如果,如果,如果或在它。我知道,如果你得到5个以上的if/箱,开关箱速度会更快。那么,if-else与if或的速度有多快,它们是一样的吗 if (item.Datum.Substring(5, 5) == "06-20" || item.Datum.Substring(5, 5) == "06-21") { Something } else if item.Datum.Substring(5, 5) == "06-22" || item.Datum.Subs

我试图使我的代码更快,我得到了很多如果,如果,如果或在它。我知道,如果你得到5个以上的if/箱,开关箱速度会更快。那么,
if-else
if或
的速度有多快,它们是一样的吗

if (item.Datum.Substring(5, 5) == "06-20" || item.Datum.Substring(5, 5) == "06-21")
{
  Something
}
else if item.Datum.Substring(5, 5) == "06-22" || item.Datum.Substring(5, 5) == "06-23")
{
  Something
}

还是我就拿着开关箱走

switch(item.Datum.Substring(5, 5))
{
   case "06-20", "06,21":
      Something
      break;
   case "06-22", "06,23":
      Something
      break;
}

在某些情况下,等效的switch语句比if语句或if语句链慢。使用频率启发法,您可以在许多程序中使用if语句优化快速路径

查看此链接,您将发现两种不同的比较


当这样一个问题出现时,我的哲学是:写得越少越好

为什么会有这样的哲学?一个词:可测试性。
每次添加行时,都必须确保其行为经过测试。我并不特别喜欢
开关
synthax,但当它将行号除以2时,我就选择它。

我会选择:

 dayStr = item.Datum.Substring(5, 5))
 day = 'split '-', ',' and convert to int'
 switch day:
 {
    case 20: // Fall through
    case 21:
       // Do something

    case 22:
    ...
}

除此之外,不要多次调用
Substring
!如果你一天不调用这个函数,我会认为它是过早的优化。我打赌“
某个东西”
“函数将花费比实现“case”开关节省的时间多得多的时间。您分析过您的代码吗?这真的是其性能的瓶颈吗?如果是的话,你有没有分析过替代方案?如果是这样的话,选择一个你测量过的性能最好的。
 dayStr = item.Datum.Substring(5, 5))
 day = 'split '-', ',' and convert to int'
 switch day:
 {
    case 20: // Fall through
    case 21:
       // Do something

    case 22:
    ...
}