Встроенное расширение в C#

Я работаю над математической библиотекой для моего 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#, что я хочу встроенный метод?

8
задан Chris D. 13 July 2010 в 11:13
поделиться

2 ответа

Компилятор C # не выполняет встраивание, но JIT вполне может это сделать в этом случае. Это, безусловно, та часть, которая будет выполнять встраивание, если уж на то пошло.

РЕДАКТИРОВАТЬ: Я бы ожидал, что он будет встроен в этом случае, но трудно сказать, не загружая код во что-то вроде cordbg с включенной оптимизацией JIT. Каждая другая версия CLR может иметь разные настройки для встраивания (включая 64-битную и 32-битную CLR), поэтому я не хочу говорить что-либо слишком определенное.

7
ответ дан 5 December 2019 в 20:13
поделиться

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

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

1
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: