委托与 if 语句

Delegate vs if statement

我有一个 class:

public class MyClass: IMyInterface
{

   int _parameter;
   public Myclass(int parameter)
   {
       _parameter = parameter;
       //Do other things
   }

   public int FrequentlyCalledFunction()
     {
        if(_parameter == 0)
         {
              return 0;
         }
         else
         {
           int result;
           //Do some calculations
           return result;
         }
     }

}

由于 _parameter 在构造函数中被分配一次,因此每次调用 FrequentlyCalledFunction 时都输入 if 语句对于已经创建的实例来说似乎有些低效。 因此,我想修改代码如下。声明一个委托

public delegate int MyDlg();

public class MyClass: IMyInterface
{

   int _parameter;
   MyDlg _intermediate; 
   public Myclass(int parameter)
   {
       _parameter = parameter;
      _intermediate = _parameter == 0 ? _returnZero : _calculateAndReturn;

       //Do other things
   }


    public int FrequentlyCalledFunction()
    {
       return _intermediate();
    }

    int _returnZero()
    {
       return 0;  
    }  
    int _calculateAndReturn()
    {
         int result;
         //Do some calculations
         return result;             
    }

}

所以现在,检查只会在创建实例时执行一次。另一方面,if 语句被替换为额外的委托调用。

问题是,假设性能非常重要,哪种方法更好?

P.S。 FrequentlyCalledFunction 是来自接口 IMyInterface 的方法,因此,我无法定义 MyDlg FrequentlyCalledFunction 并从 class.

的外部调用它

你想多了。在这种情况下提高性能的最佳方法是使 MyClass 抽象,并定义两个子类:MyClassWithCalculations 和 MyClassWithoutCalculations。 当您要创建 MyClass 的实例时,检查参数:如果它为零,则实例化 MyClassWithoutCalculations。如果它不为零,则实例化 MyClassWithCalculations。没有代表,没有如果,没有复杂的东西。

话虽如此,我还要补充一点,您认为无辜的 if( variable == 0 ) 语句会以任何重大方式影响性能的想法可能是错误的。

我在寻找改进现有应用程序性能的想法时遇到了这个问题。场景:

  • 以 44 Hz(每 ~23 毫秒)的速率到达的更新流

  • 更新只有16字节的数据

  • 更新会发生什么(在输出到消费系统之前应该如何转换)取决于 Guid.

    的值
  • 那个Guid...

    • 更改相对不频繁 -- 不是 8 小时,然后是 10 分钟几次。
    • 由于来自单独系统的调用而发生的变化。

objective 是为了减少接收更新和将值发布到消费系统之间的时间。

在我的场景中,if 语句在每次更新时检查 Guiddelegate 用于指向另一个函数 的成本为 4 毫秒。对我们来说,换掉它是值得的,因为我们所有其他优化都低于 1 毫秒。

我想真正的答案是“测试、测试、测试”,但我想我会分享我的经验。