Подстановка в C#

Я работаю над математической библиотекой для моего движка DirectX 3D в C#. Я использую 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#, что мне нужен метод inlined?

2 ответов


компилятор C# не выполняет inlining-но JIT вполне может сделать это в этом случае. Это, конечно, кусок, который would выполнить подстановку, если что.

EDIT: я бы ожидал в этом случае он встроен, но трудно сказать, не загружая код во что-то вроде cordbg с включенной оптимизацией JIT. Каждая другая версия CLR может иметь разные настройки для своей вставки (включая 64-битную и 32-битную CLR), поэтому я неохотно сказать что-то слишком определенное.


вот некоторая информация об обстоятельствах, при которых JIT не будет выполнять встраивание;

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