代码之家  ›  专栏  ›  技术社区  ›  Wesley Wiser

对于一个大的.maxstack,如果有的话,性能损失是多少?

  •  2
  • Wesley Wiser  · 技术社区  · 14 年前

    public bool Equals(ThisType o)
    {
        return Field1 == o.Field1 && Field2 == o.Field2 && Field3 == o.Field3;//etc
    }
    

    我的编译器将所有这些对象推送到堆栈中,然后开始将它们进行比较和“和”运算。这会导致方法的.maxstack很快变大。有处罚吗?如果是这样的话,我应该在什么时候开始向本地人灌输价值观?

    1 回复  |  直到 14 年前
        1
  •  2
  •   kvb    14 年前

    你为什么不衡量一下对你来说很重要的情景,然后找出答案呢?您的性能可能会因.NET版本或处理器体系结构的不同而有所不同,因此您确实需要衡量所关心的变体。据我所知, maxstack 猜测

      load Field1
      load o.Field1
      branch to end if not equal
      load Field2
      load o.Field2
      branch to end if not equal
      ...
      return true
    end:
      return false
    

    这将使用恒定的堆栈空间,而不考虑字段的数量。