【问题标题】:Performance if else, swtich and teranary operatorif else、switch 和三元运算符的性能
【发布时间】:2018-08-07 23:24:08
【问题描述】:

我正在努力提高我的应用程序的性能。目前,我有以下代码迭代超过 1000 次:

if(!condition){
    switch(const) {
          case one : value = x; break;  
          case two : value = y; break;
    }
} else {
    switch(const) {
          case one : value = p; break;  
          case two : value = q; break;
    }
}

如果我按如下方式重构代码会提高性能吗?

switch(const) {
      case one : condition ? value = p : value = x; break;  
      case two : condition ? value = q : value = y; break;
}

【问题讨论】:

  • 参见this 答案,它解释了为什么在某些情况下switch 应该优于ifs。除此之外,这实际上不太可能成为您的应用程序的瓶颈,因此我的建议是选择更具可读性的内容。
  • @RandomThoughts 可以看看 Task Parallel 库,如果你在分离的线程中迭代,那么你肯定会提高性能
  • 您是否通过探查器运行程序以便知道这是一个瓶颈?
  • @LasseVågsætherKarlsen 是的,我有,这是瓶颈之一。我也有其他事情,但只是没有找到解决方法。
  • 然后进行更改,再次运行分析器,看看它是否有帮助(我怀疑它会)。

标签: c# performance if-statement switch-statement ternary-operator


【解决方案1】:

您可以使用秒表记录时间,这样您就可以看到自己,但是当我验证时,我看到了第二个逻辑的性能改进。此外,它可能会因您过世的条件而异。

 System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
             stopwatch.Start(); // START THE WATCH

            // write your logic here 

            stopwatch.Stop(); // STOP THE WATCH

            Console.WriteLine("Time taken : {0}", stopwatch.Elapsed);
            Console.ReadKey();

希望对你有帮助。

【讨论】:

  • 除了Stopwatch 不太适合这种(微)基准测试,这不是一个答案。我还没有测试过它,但是由于Stopwatch.ElapsedTimeSpan,最小的可能记录时间是毫秒,我相信显示的代码仅相差几纳秒或毫秒,因此Stopwatch.Elapsed 将是0 在这两种情况下。
猜你喜欢
  • 2017-11-19
  • 2014-05-10
  • 1970-01-01
  • 2010-12-12
  • 2021-01-03
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多