8

我正在用 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# 编译器我想要一个内联方法?

4

2 回答 2

7

C# 编译器不执行内联 - 但 JIT 在这种情况下可能会这样做。如果有的话,那肯定是执行内联的部分

编辑:我希望它在这种情况下是内联的,但是如果不将代码加载到诸如打开 JIT 优化的 cordbg 之类的东西中,就很难说清楚。每个不同的 CLR 版本可能对其内联有不同的调整(包括 64 位和 32 位 CLR),所以我不愿意说太明确的话。

于 2010-07-13T11:14:02.503 回答
1

以下是有关 JIT 不会执行内联的情况的一些信息;

http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx

于 2010-07-13T11:22:57.143 回答