Eve*_*rts 2 .net c# math performance lib
所以我们尝试用 C# 开发一个数学类,我们做到了。将结果与 System.Math 的原始数学类进行比较表明我们总是迟到一点或很多(特别是触发方法)。
但是当我们使用像 Absolut value 这样不包含大量代码的基本方法时,奇迹就出现了
if(value < 0) return -value;
else return value;
Run Code Online (Sandbox Code Playgroud)
我们仍然远远落后。
我不能让这个 abs 方法更小,我猜使用三元运算符也无济于事。
是因为 System.Math 是用 C 编写的吗?如果我们用母语写它会不会更快,尽管我读过它似乎不会改变太多。最后,一个 dll 能不能比一个类工作得更快,如果是,为什么,如果不是......为什么呢?
已经谢谢了。
继续Servé 的评论,该评论显示 CLR 是用 C++ 编写的,您会发现Math.Abs调用fabs 或 fabsf。
FCIntrinsicSig("Abs", &gsig_SM_Flt_RetFlt, COMDouble::AbsFlt, CORINFO_INTRINSIC_Abs)
FCIntrinsicSig("Abs", &gsig_SM_Dbl_RetDbl, COMDouble::AbsDbl, CORINFO_INTRINSIC_Abs)
Run Code Online (Sandbox Code Playgroud)
/*=====================================AbsFlt=====================================
**
==============================================================================*/
FCIMPL1_V(float, COMDouble::AbsFlt, float f)
WRAPPER_CONTRACT;
STATIC_CONTRACT_SO_TOLERANT;
FCUnique(0x14);
return fabsf(f);
FCIMPLEND
/*=====================================AbsDbl=====================================
**
==============================================================================*/
FCIMPL1_V(double, COMDouble::AbsDbl, double d)
WRAPPER_CONTRACT;
STATIC_CONTRACT_SO_TOLERANT;
return fabs(d);
FCIMPLEND
Run Code Online (Sandbox Code Playgroud)