Подстановка в 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