嵌套函数或方法调用会降低应用程序的性能吗
Posted
技术标签:
【中文标题】嵌套函数或方法调用会降低应用程序的性能吗【英文标题】:can nested function or method call reduce performance of application 【发布时间】:2015-01-10 10:25:31 【问题描述】:我正在使用 asp.net 和 C# 开发应用程序,其中我们的项目架构有很多嵌套的函数调用。
public Employe GetEmployeOrder(orderid, employe)
GetEmployeOrderWithDetails(orderid, employe.ShippingId,BillingId);
public Employe GetEmployeOrderWithDetails(guid orderid,guid ShippingId,guid BillingId)
// Another function call
您可能已经知道我在说什么场景。如果我有这样的嵌套调用,那么它会影响我的应用程序的性能吗?
【问题讨论】:
这应该是您最关心的问题,除非您发现性能问题和基准测试另有说明。无论如何,拥有多个单行传递函数听起来像是重新考虑这些函数的设计和/或使用和必要性的理由。 如果你想要一个关于 C# 的答案,那就是你应该将标签用作不相关技术的垃圾邮件标签,这可能会惹恼人们。 @Peter Lawrey - 我认为这是一个普遍的场景,它会影响 java 和 .net 两者都会影响性能,但感谢您的回复,我得到了我的问题的答案。 @rahul.deshmukh 我很确定这是错误的答案。 ;) 【参考方案1】:在 Java 中
几乎没有直接影响。 35 到 325 字节字节码的简单方法被内联,因此它们不会影响性能。 35 字节的小方法几乎立即内联,“经常”调用的最多 325 字节的方法默认内联(可以增加)。
遇到问题的地方是更多代码更难推理。更难推理的代码,开发人员很难优化(在某些情况下是 JIT),例如假设您计算了嵌套、嵌套、嵌套调用者丢弃的昂贵参数。另一个常见的性能问题是转换,例如一个 String 被解析成一个 double ,它被转换成一个 String ,一个 BigDecimal ,最后又是一个 String 。如果您没有多层嵌套,那么以 String 开头的内容可以保留为 String 会更明显。
通常情况下,如果有疑问,假设最简单、最清晰的代码是最好的。
【讨论】:
酷,不知道 35-325bytes 方法内联。 @YoryeNathan 我错过了 OP 标记为java
但没有询问 Java。【参考方案2】:
简单——是的
您应该尽可能保持代码直截了当,每个嵌套函数调用都会在程序内存堆栈上产生负载 - 处理器会记住要跳回的位置,以及要返回的内容,未完成的函数也会被记住在堆栈上。
更简单? - 反复循环可能会导致有趣的事情,但仍然少于 20 个级别或循环几乎是不可见的。
【讨论】:
此类方法是内联的,因此在运行时几乎没有影响。 Java 没有尾调用优化,因此递归是每个方法调用都会影响性能的一个例子。以上是关于嵌套函数或方法调用会降低应用程序的性能吗的主要内容,如果未能解决你的问题,请参考以下文章