【问题标题】:Are there performance penalties for named/optional parameters for constructors? [duplicate]构造函数的命名/可选参数是否存在性能损失? [复制]
【发布时间】:2014-02-27 07:09:05
【问题描述】:

也会:

public Car(string color = "red", topSpeed = 180)
{
  carColor = color;
  carTopSpeed = topSpeed;
}

比构造函数链接更快或更慢以获取 carColor 和 carTopSpeed 的值? 我知道在桌面环境中性能几乎总是可以忽略不计,但是:

我想知道在手机游戏开发中,所有的小事都会影响性能。

提前致谢!

【问题讨论】:

  • @Ofiris:不太一样。这个问题谈到了命名/选项 - 这个问题是关于初始化器与构造器的。
  • 你说得对,一时糊涂了。
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。
  • 啊,对不起! @OndrejJanacek

标签: c# performance constructor


【解决方案1】:

没有性能损失。

实际上,可选参数在运行时是不存在的。它们是编译器技巧,即编译器放入完整的参数集。

甚至有一个明确的警告不要使用它们(我完全不同意),因为如果您更改默认值,那么旧的编译代码不会使用新值。

Performance differences between overloading or optional parameters?

有完全相同的问题。

【讨论】:

    【解决方案2】:

    不,根本没有性能损失。当编译器识别出您正在使用带有默认参数的构造函数时,它会自动将这些值插入到编译后的代码中。

    调用var car = new Car() 的编译方式与您这样调用它的方式完全相同:

    var car = new Car("red", 180);
    

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2012-03-14
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多