【问题标题】:.NET 4, C++, how if...else and switch() affect on performance.NET 4,C++,if...else 和 switch() 如何影响性能
【发布时间】:2012-12-19 08:53:57
【问题描述】:

现在在我的应用中,我正在使用这种结构

if (e->UserState->Equals(1)) {} //stuff 1
else if (e->UserState->Equals(2)) {} //stuff 2
... // e - EventArgs of .NET 4 WebClient class

我应该更好地定义

int n = (int)e->UserState;

并使用 switch()

switch(n)
{
  case 1:
  //stuff 1
  break;

  case 2:
  //stuff 2
  break;
}

它会以某种方式影响性能吗? (e->UserState的大约15个变种)

【问题讨论】:

    标签: c++ .net performance algorithm


    【解决方案1】:

    (大约 15 个 e->UserState 变体)

    出于可读性目的,我会以switch 形式编写它!至于性能,您可以通过分析进行检查,但我怀疑差异是否具有统计学意义。

    【讨论】:

      【解决方案2】:

      切换情况会更快(在这种情况下),因为编译器可以做很多技巧来使其更快,例如跳转表,其中值用作该表的索引或二进制搜索。
      请注意,如果 'if' 中的条件仅包含变量和常量,编译器可能会执行相同的技巧,但如果您在条件中调用某些函数/方法,编译器必须按顺序进行每次检查以保持可能在此函数中产生的副作用。

      【讨论】:

        【解决方案3】:

        性能不是这里的关键因素(因为它可以忽略不计)而是可读性。所以也可以使用switch 甚至是一个方法:

        public static void Stuff(UserState state)
        {
            // do your stuff here ...
        }
        

        现在你可以使用它了(假设 UserState 是一个现有的枚举):

        UserState state = (UserState)(int)e;
        Stuff(state);
        

        【讨论】:

          猜你喜欢
          • 2016-08-07
          • 1970-01-01
          • 2023-04-09
          • 2018-08-07
          • 2020-12-31
          • 1970-01-01
          • 2012-01-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多