Pergunta

Estou trabalhando em uma biblioteca matemática para meu mecanismo DirectX 3D em C#.Estou usando SlimDX, que é uma biblioteca maravilhosa e poderosa.SlimDX fornece algumas classes matemáticas, mas na verdade são wrappers em torno de objetos D3DX nativos; portanto, embora os objetos em si sejam muito, muito rápidos, presumo que a interoperabilidade não seja, porque meu código C# gerenciado os supera.

Minha pergunta específica tem a ver com comparação de ponto flutuante.A maneira meio canônica é definir um valor épsilon e comparar o valor com a diferença entre os valores de ponto flutuante para determinar a proximidade, da seguinte forma:

float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
  return Math.Abs(a - b) < Epsilon
}

A sobrecarga da chamada de função inundaria a comparação real, portanto, essa função trivial seria incorporada em C++. O compilador C# fará isso?Existe uma maneira de informar ao compilador C# que desejo um método embutido?

Foi útil?

Solução

O compilador C# não executa inlining - mas o JIT pode fazê-lo neste caso.Essa é certamente a peça que seria execute inlining, se houver.

EDITAR:Eu poderia esperar neste caso, é difícil dizer sem carregar o código em algo como cordbg com otimizações JIT ativadas.Cada versão diferente do CLR pode ter ajustes diferentes em seu inlining (incluindo os CLRs de 64 bits versus 32 bits), por isso estou relutante em dizer algo muito definitivo.

Outras dicas

Aqui estão algumas informações sobre as circunstâncias sob as quais o JIT não realizará o inlining;

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top