2015-07-29 7 views
11

Roslyn on GitHub के स्रोत कोड के माध्यम से पढ़ते समय, मैंने देखा कि ObjectPool<T> कक्षा का उपयोग किया गया था। इसका उपयोग मेमोरी ओवरहेड को कम करने के लिए किया जाता है।सरणी में रखे जाने पर संरचनाओं में रोसलीन लपेटें क्यों?

आंतरिक यह an array का उपयोग करता जमा वस्तुओं स्टोर करने के लिए। क्या मुझे समझ नहीं आता बजाय सिर्फ T का उपयोग करने का कारण है कि यह एक निजी struct सरणी तत्व के रूप में प्रकार T की एक एकल क्षेत्र युक्त Element कहा जाता है का उपयोग करता है।

क्या यह प्रदर्शन के लिए चिंता से बाहर है? मेमोरी ओवरहेड?

उत्तर

14

यह प्रदर्शन कारणों से हो सकता है। this article by Jon Skeet देखें।

संक्षेप में, मान प्रकार सरणियों सी #, जो क्रम एक संगतता की जाँच कर रही है जब सरणी में आइटम संग्रहीत करने से बच सकते हैं इसका मतलब है में अपरिवर्तनीय हैं। लेख में, श्री स्कीट आपके द्वारा वर्णित एक रैपर संरचना का उपयोग करता है और सरणी में लेखन प्रदर्शन में सुधार दिखाता है।

+0

पवित्र ..... मुझे इसकी उम्मीद नहीं थी, सरणी को खुद को परिवर्तनीय घोषित करना संभव होना चाहिए। इस कामकाज से ज्यादा अच्छा होगा। अब मुझे अपने विज़ुअलाइज़ेशन इंजन में कुछ सामान बदलने की जरूरत है। : -/ –

+0

अरे ... मुझे यह नहीं पता था। मैं निश्चित रूप से कल कुछ कोड जांचने वाला हूं: - \ –

+1

मैंने [Roslyn प्रोजेक्ट] पर एक [फीचर प्रस्ताव] (https://github.com/dotnet/roslyn/issues/4211) पोस्ट किया है (https: // github .com/डॉटनैट/Roslyn)। यह invariant सरणी का उपयोग थोड़ा आसान बनाने के लिए है। – Wazner

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