我正在为C#中的DirectX 3D引擎开发数学库。我正在使用SlimDX,这是一个奇妙的拼凑和强大的库。 SlimDX提供了相当多的数学类,但它们实际上是本机D3DX对象的包装器,所以虽然对象本身非常非常快,但我认为互操作不是因为我的托管C#代码优于它们。
我的具体问题与浮点比较有关。排序规范的方法是定义一个epsilon值,并将值与浮点值之间的差值进行比较以确定接近度,如下所示:
float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
return Math.Abs(a - b) < Epsilon
}
函数调用开销会淹没实际的比较,所以这个简单的函数将在C ++中内联,C#编译器会这样做吗?有没有办法告诉C#编译器我想要一个内联方法?
答案 0 :(得分:7)
C#编译器不执行内联 - 但在这种情况下JIT可能会这样做。这肯定是 执行内联的部分,如果有的话。
编辑:在这种情况下我会期望它内联,但是如果没有将代码加载到启用了JIT优化的cordbg之类的内容中,很难说清楚。每个不同的CLR版本可能会对其内联进行不同的调整(包括64位与32位CLR),所以我不愿意说太明确。
答案 1 :(得分:1)
以下是有关JIT不会执行内联的情况的一些信息;
http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx