.net中的方法调用有多贵

时间:2010-03-17 14:39:34

标签: .net

通过内联代码调用方法的相对性能成本是多少?

5 个答案:

答案 0 :(得分:20)

这取决于很多事情

  • JIT是否为您内联
  • 是否是虚拟的
  • 参数的数量和大小
  • 是否为实例方法(隐式无效检查)
  • 是否有返回值(及其大小,如果是)

非常,非常不太可能成为你的瓶颈。与往常一样,首先编写最易读的代码,然后对其进行基准测试,看它是否表现得足够好。如果没有,请使用分析器查找可能值得进行微优化的热点。

答案 1 :(得分:7)

与方法调用相关联cost;

需要将参数压入堆栈或存储在寄存器中,需要执行方法prolog和epilog等等。 In-lining.

可以避免这些来电的费用

但是,JIT使用了一些启发式方法来决定方法是否应该是内联的。以下因素影响JIT,而非影响In-line方法。

  • 大于32的方法 IL的字节
  • 虚拟功能
  • 流程复杂的方法 控制
  • 包含的方法 异常处理块
  • 如果任何方法是正式的 参数是结构

参考:Method Inlining

答案 2 :(得分:3)

与C ++相同。基本上是呼叫和返回,加上设置参数。但是请注意,JIT可以内联方法调用 - 因此在特定的上下文中可能没有您想象的那么昂贵。

答案 3 :(得分:1)

微不足道。 .net中的每次调用,至少对于C#来说都是虚拟调用,即使方法没有标记为虚拟,也要考虑它。

答案 4 :(得分:1)

与使代码易于阅读且意图清晰相比,性能成本无关紧要,无关紧要。