.net中的方法调用有多贵

And*_*rew 11 .net

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

Jon*_*eet 20

这将取决于许多事情

  • JIT是否为您设计
  • 是否是虚拟的
  • 参数的数量和大小
  • 是否为实例方法(隐式无效检查)
  • 是否有返回值(如果有的话,还有它的大小)

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


Asa*_*sad 7

有一个cost与方法调用相关联;

参数需要被压入堆栈或存储在寄存器中,方法prolog和epilog需要执行等等.这些电话的费用可以避免In-lining.

但是,JIT使用一些启发式方法来确定方法是否应该是内联的.以下因素影响JIT,而不是内联方法.

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

参考:方法内联