2010-07-13 19 views
8

C# 'daki DirectX 3D motor için bir matematik kitaplığı üzerinde çalışıyorum. Harika bir araya getirilen SlimDX'i ve güçlü bir kütüphaneyi kullanıyorum. SlimDX epeyce matematik dersi sağlar, ancak aslında D3DX nesneleri etrafında sarmalayıcılar olurlar, bu yüzden nesnelerin kendileri çok ama çok hızlı olsa da, birlikte çalışmam benim için uygun değildir. Çünkü benim yönetilen C# kodum onları geride bırakıyor.Inline genişleme C#

Özel sorum, kayan noktalı karşılaştırma ile ilgili. kanonik şekilde-tür bir epsilon değerini tanımlar ve böylece gibi yakınlık belirlemek için kayan nokta değerleri arasındaki fark değerini karşılaştırmak için:

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

işlev çağrısı üst gerçek karşılaştırma bataklık olur, Yani bu önemsiz işlev C++ 'da belirtilmiş olacak, C# derleyicisi bunu yapacak mı? C# derleyicisine belirtilmiş bir yöntem istediğimi söylemenin bir yolu var mı?

cevap

7

C# derleyici satır içi çizgisi göstermiyor - ancak JIT bu durumda bunu yapabilir. Bir şey varsa, 'un'un satır içi işlemini gerçekleştireceği parça kesinlikle budur.

DÜZENLEME: olmasını beklemekteyim, ancak bu durumda JIT optimizasyonları açıkken kordbg gibi bir şeye kodu yüklemeden söylemek zor. Her bir farklı CLR versiyonu, inline edilmesine (64 bit vs 32 bit CLR'ler dahil) göre farklı ince ayarlara sahip olabilir, bu yüzden çok kesin bir şey söylemek istemiyorum.

+1

JIT hata ayıklayıcı dışında çalıştırmak inlining, yaklaşık oldukça zeki olabilirler. Örneğin, Math.Abs' yönteminin kendisini inline edebilir. –

+0

Şimdi soru şudur: Bu durumda IT (optimize edilmiş kod ve hata ayıklayıcı varsayarak)? – Mau

+0

@Mau: Düzenleme ... –