2010-07-13 18 views
8

में इनलाइन विस्तार मैं सी # में अपने डायरेक्टएक्स 3 डी इंजन के लिए गणित पुस्तकालय पर काम कर रहा हूं। मैं स्लिम डीएक्स का उपयोग कर रहा हूं, जो एक अद्भुत और शक्तिशाली लाइब्रेरी है। स्लिमडैक्स काफी गणित वर्ग प्रदान करता है, लेकिन वे वास्तव में मूल डी 3 डीएक्स ऑब्जेक्ट्स के आसपास रैपर होते हैं, इसलिए ऑब्जेक्ट्स स्वयं बहुत तेज होते हैं, इंटरऑप मुझे लगता है, क्योंकि मेरा प्रबंधित सी # कोड उन्हें बेहतर बनाता है।सी #

मेरा विशिष्ट प्रश्न फ्लोटिंग-पॉइंट तुलना के साथ करना है। तरह-का प्रामाणिक तरीका एक एप्सिलॉन मूल्य को परिभाषित करने के लिए, और निकटता निर्धारित करने के लिए है, तो जैसे फ्लोटिंग प्वाइंट मूल्यों के बीच अंतर करने के लिए मूल्य की तुलना है:

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

समारोह कॉल उपरि वास्तविक तुलना दलदल हैं, तो यह मामूली फ़ंक्शन सी ++ में रेखांकित किया जाएगा, क्या सी # कंपाइलर ऐसा करेगा? क्या सी # कंपाइलर को बताने का कोई तरीका है कि मैं एक विधि को रेखांकित करना चाहता हूं?

उत्तर

7

सी # कंपाइलर इनलाइनिंग नहीं करता है - लेकिन इस मामले में जेआईटी ऐसा कर सकता है। यह निश्चित रूप से वह टुकड़ा है जो कुछ भी अगर इनलाइनिंग करता है।

संपादित करें: की उम्मीद है कि यह इस मामले में इनलाइन हो, लेकिन कोड को लोड करने के बिना जेड ऑप्टिमाइज़ेशन के साथ कॉर्डबग जैसे कोड को लोड किए बिना बताना मुश्किल है। प्रत्येक अलग-अलग सीएलआर संस्करण में इसके इनलाइनिंग (64 बिट बनाम 32 बिट सीएलआर सहित) में अलग-अलग बदलाव हो सकते हैं, इसलिए मैं कुछ भी निश्चित कहने में अनिच्छुक हूं।

+1

JIT इनलाइनिंग, जब डिबगर के बाहर चलाने के बारे में काफी बुद्धिमान हो सकता है। उदाहरण के लिए, यह 'Math.Abs' विधि को स्वयं रेखांकित कर सकता है। –

+0

अब सवाल यह है: क्या इस मामले में यह होगा (अनुकूलित कोड और कोई डीबगर नहीं मानते)? – Mau

+0

@ मऊ: संपादन ... –

1

यहां उन परिस्थितियों के बारे में कुछ जानकारी दी गई है जिनके तहत जेआईटी इनलाइनिंग नहीं करेगा;

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

+0

लिंक के लिए धन्यवाद, जो वास्तव में बहुत कुछ बताता है। –