为什么System.Math有Sin,Cos等的外部方法?

Joa*_*nge 2 .net c#

[MethodImpl(MethodImplOptions.InternalCall)]
public static extern double Sin(double a);
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

Meh*_*ari 10

MethodImplOptions.InternalCall表示该方法由公共语言运行库本机实现.它对数学运算很有意义,因为它们通常针对目标平台进行了大量优化.例如,在x86架构中,有一条指令可以计算正弦和余弦.托管实现不太可能直接利用这些指令.

  • 最有可能的是,他们针对每种架构对其进行了优化.即使它们只是在非托管C标准库中调用`sin`,编译器也会通过编译CLR代码库来优化调用.2.该属性在IL中肯定是可见的,但该方法的*body*根本没有IL.正如我所说,该方法是CLR的一部分,因此它对已实现的方法有深入的了解.当JIT编译器看到这样的方法时,它将用自己的方法替换调用. (2认同)