2010-09-06 8 views
9

बहुत सी सरणी सीमा जांच गति को धीमा कर देती है, यह विशेष रूप से 2 डी सरणी के लिए सच है। क्या एफ # में असुरक्षित कोड ब्लॉक लिखने का कोई तरीका है?क्या एफ # के पास सी # के "असुरक्षित" ब्लॉक के बराबर वाक्यविन्यास है

+2

ऐसा कुछ नहीं जो मैं रोज करता हूं, लेकिन एफ # आपको कोड में सीएलआर अक्षर लिखने की अनुमति देता है, मुझे लगता है कि इसके माध्यम से असुरक्षित पॉइंटर ऑपरेशन करने का एक तरीका है। – Juliet

उत्तर

9

मैं एक F# प्रोग्रामर नहीं कर रहा हूँ, लेकिन जहाँ तक मैं देख सकता हूँ यह unsafe कीवर्ड के लिए प्रतीत नहीं होता।

आप 2 डी सरणी को एक-आयामी सरणी में बदलकर प्रदर्शन को बढ़ावा दे सकते हैं।

सलाह 5: जब तक हम यह अधिकार मिलता है, मैं सुझाव है कि नेट उपयोगकर्ताओं को क्या कई सी ++ संख्यात्मक प्रोग्रामर करते हैं: अपने n आयामी सरणी लागू करने के लिए एक वर्ग लिखें। यह एक 1-आयामी सरणी, के रूप में प्रतिनिधित्व किया जाएगा और प्रासंगिक एक्सेसर्स एन सूचकांक को उचित गुणाओं के माध्यम से 1 में परिवर्तित करेगा। हम लगभग निश्चित रूप से को 1-डी सरणी, में सीमाओं को चेक नहीं करेंगे, लेकिन कम से कम हम केवल एक ही जांच करेंगे!

Array Bounds Check Elimination in the CLR

+0

आपके द्वारा इंगित एमएसडीएन आलेख वास्तव में दिलचस्प पढ़ने के लिए बनाता है :-) –

+0

मैंने ऐसा भी सोचा और चूंकि यह सीएलआर के बारे में है, यह भाषा अज्ञेयवादी होना चाहिए। –

1

इस संस्करण में नहीं है और मुझे शक है वे कभी भी इसे जोड़ देंगे।

2

मैंने यह नहीं पता कि यह कैसे/कैसे लागू होता है, लेकिन NativePtr module देखें।

3

आपके लिए सीमा जांच को हटाने के लिए कंपाइलर प्राप्त करने के कुछ तरीकों के लिए here देखें। असल में, आपको अपने लूप को इस तरह लिखने की ज़रूरत है कि संकलक जानता है कि आपकी अनुक्रमणिका सीमाओं में होगी। अगर यह जानता है कि यह सीमा में होगा, तो जब आप डिबगिंग के बिना रिलीज मोड में भाग लेंगे, तो जेआईटी कंपाइलर आपके लिए सीमाएं चेक हटा देगा।

संबंधित मुद्दे