在构造函数中使用多个参数的性能

发布于 2025-01-06 14:16:24 字数 230 浏览 0 评论 0原文

有谁知道在构造函数(10+)中使用许多参数与 setter 相比对性能有什么影响?

在我的情况下,如果没有任何这些参数,模型对象就无效,因此我使用单个构造函数。

我知道两种情况都没有显着差异,但我想问是否有人知道这两种情况实际上发生了什么。

我要求性能,因为该应用程序是 Android 应用程序,可以在没有 JIT 的情况下在旧设备上运行。

如果我们知道最佳解决方案,那就太好了。

Does any one know what is the performance impact when using many parameters in constructor (10+) compared to setters?

I my case the model object is not valid without any of those parameters, so I am using single constructor.

I know that there is not significant difference either way, but I am asking if anyone knows whats actually going on in both cases.

I am asking for performance because the application is Android application that can be run on older devices without JIT.

Also it would be nice if we know the optimal solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夏九 2025-01-13 14:16:24

使用 setter 与构造函数的性能影响可以忽略不计,因为在这两个实例中发生的事情大致相同:传递给方法的数据存储在实例变量中。

使用 10 个 setter,您需要为 9 个额外的方法调用付出代价,但它们非常便宜,您不太可能发现任何差异,特别是如果它们由 JIT 编译器内联的话。

逻辑含义要严重得多:如果您的对象在设置所有十个实例变量之前才有效,那么您肯定需要使用具有十个参数的构造函数:性能增益,无论是否真实,对于类的逻辑完整性来说都是次要的,这不应受到损害。

The performance implication of using the setters vs. the constructor is negligible, because roughly the same thing is going on in both instances: data passed to a method gets stored in an instance variable.

With ten setters you pay the price for nine additional method calls, but they are so extremely cheap that you are not likely to find any difference, especially if they get inlined by JIT compiler.

Logical implications are a lot more severe: if your object is not valid until you set all ten instance variables, then you definitely need to use a constructor with ten parameters: performance gains, real or not, are secondary to the logical integrity of your class, which should not be compromised.

子栖 2025-01-13 14:16:24

在大多数情况下,如果您遇到这种情况,则明确表明您的代码需要(某些)重构。这两种解决方案都不好(即构造函数与设置器中的大参数列表)。此外,鉴于您无法强制该对象的客户端调用 setter,因此很容易出现一些运行时错误。

至于性能部分:不,性能影响不会因此而发生。没有理由这样做。

In most cases, if you have such a situation, it's a clear indication that your code needs (some) refactoring. None of the 2 solutions are good (i.e. big parameter list in constructor vs. setters). Also, given the fact that you can't force the clients of that object to call the setters, some runtime errors can easily occur because of this.

As for the performance part: no, performance impacts don't happen because of this. There is no reason why it should.

水溶 2025-01-13 14:16:24

您可以将所有参数封装在一个对象中,并将其作为参数传递给构造函数。

You can encapsulate all the parameters in a single object, and pass it as a parameter to your constructor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文