我正在查看.net core 3.0中List和LargeArrayBuilder类的源代码,并看到该方法AddWithBufferAllocation带有注释“非内联以提高代码质量,这是不常见的路径”。此外,方法的属性MethodImpl
的值为MethodImplOptions.NoInlining
。 noinlining如何提高代码质量?
我相信这会降低性能。我可能是错的,但是调用方法是物理调用方法(调用指令)并传递参数的开销。特别是,如果我们使用值类型。
if
测试为假,并且根本不进行方法调用时,在general情况下提高了性能。
这意味着AddRange
,即可能使方法调用(但很少)要小,并且比同一个方法(其中所有AddWithBufferAllocation
都可能内联在其中)可以得到更好的优化。