【问题标题】:Conditional statement order by frequency or compute time?条件语句按频率或计算时间排序?
【发布时间】:2013-09-12 07:09:57
【问题描述】:

假设我在 IF-ELSE 语句中有 100 个不同的条件。

if((boolean = methodA)){
    ...
}
else((boolean = methodZ)){
    ...
}

从逻辑上讲,我认为最不可能出现的条件应该是最后一个条件(带有methodZ的那个),而最常见的条件应该是第一个条件(methodA)。

然后我想“如果methodA需要大量时间计算怎么办?”。 methodZ 将花费更多的时间而不是到达即使它最不频繁。我应该按计算时间排序条件吗?还是仅按频率排序?

什么是解决这个困境的好方法?

【问题讨论】:

    标签: java performance logic


    【解决方案1】:

    假设我在 IF-ELSE 语句中有 100 个不同的条件

    如果您碰巧在现实世界的应用程序中这样做,那么您有一个巨大的设计问题需要解决,而不是衡量评估条件的时间。

    我应该按计算时间排序条件吗?还是仅按频率排序?

    对此没有确切的答案。首先要做的是编写条件,然后在您的应用程序中使用profiler 并评估某些条件是否真的在您的代码中存在问题。如果您发现其中一个 CPU 使用率很高,则开始具体分析以增强它。

    【讨论】:

      【解决方案2】:

      您需要取得平衡。要计算的时间不仅针对方法,而且针对整个事务。如果methodZ在methodA的1/100时间内完成,并且methodZ的频率小于methodA的100次,则应该移到顶部。

      【讨论】:

      • 如果所有条件的评估恰好需要10ms,那么没有什么可担心的=\
      • ... 除非您的可用时间少于 10 毫秒。 ;)
      猜你喜欢
      • 2013-12-28
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2021-07-03
      相关资源
      最近更新 更多