Встроенное расширение в C #
-
14-09-2020 - |
Вопрос
Я работаю над математической библиотекой для моего DirectX 3D-двигателя в C #.Я использую Slimdx, который является прекрасным собранным и мощной библиотекой.SLIMDX предоставляет довольно много математических классов, но они на самом деле являются обертками вокруг собственных объектов D3DX, поэтому, в то время как сами объекты очень, очень быстро, Interop не полагаю, потому что мой управляемый C # код превосходит их.
Мой конкретный вопрос имеет отношение к сравнению с плавающей точкой.Вид канонического способа - определить значение эпсилона и сравнить значение для разницы между значениями с плавающей точкой для определения близости, например:
float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
return Math.Abs(a - b) < Epsilon
}
.
Накладные расходы на вызов функции будут бороться на фактическое сравнение, поэтому эта тривиальная функция будет включена в C ++, будет ли это компилятор C #?Есть ли способ сказать компилятору C #, что я хочу, чтобы набранный метод?
Решение
Компилятор C # не выполняет встроен - но джит вполне может сделать это в этом случае.Это, безусловно, часть, который будет встроить встроить, во всяком случае.
Редактировать: я бы ожидаю, что в этом случае его встроен, но трудно сказать без загрузки кода во что-то вроде CODDBG с включенными jit Optimizations.Каждая другая версия CLR вполне может иметь разные настройки к его встронению (включая 64 бит против 32 битных CLR), поэтому я не хочу сказать что-либо слишком определенное.
Другие советы
Вот некоторая информация об обстоятельствах, при которых JIT не будет выполнять встроиться;
http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx