2010-02-15 27 views
30

ऐसा लगता है कि अज्ञात प्रकार ऑब्जेक्ट से प्राप्त नहीं होते हैं। लेकिन मैंने सोचा कि मैं उन गुमनाम प्रकारों में उपयोग किए जाने वाले डेटा के सबसेट निकालने के लिए सरल क्वेरी अभिव्यक्तियों में अज्ञात प्रकारों का उपयोग करने के समय से पूछूंगा। यह मुझे लगता है कि वे अधिक स्मृति दक्षता बनाम संदर्भ प्रकार के लिए structs (मूल्य प्रकार) होना चाहिए।क्या सी # में अनाम structs बनाने का कोई तरीका है?

विचार?

+0

यह उन स्थितियों में अनाम कक्षाओं के लिए आदर्श विकल्प होगा जहां जीसी स्पाइक्स अवांछित हैं। –

उत्तर

28

नहीं कोई समर्थित सी # वाक्यविन्यास जो गुमनाम structs

+9

श्वास। बमर डूड {-o) – Boydski

+0

यह सी # 7.0 के मामले में है। मुझे लगा कि एक नया वाक्यविन्यास संस्करण (जैसे 7.2, 8.0) के रिलीज के साथ यह उत्तर गलत हो जाता है, तो संस्करण संख्या को इंगित करना अच्छा होगा। –

3

का उत्पादन करेगा आप अपने अनुप्रयोग प्रोफाइल और इसके बारे में सबसे धीमी हिस्सा बनने के लिए गुमनाम प्रकार मिल गया है है? यदि ऐसा है, तो मेरा सुझाव है कि आप मैन्युअल रूप से आवश्यक structs बनायें और फिर से जांच लें कि यह देखने के लिए कि क्या आपकी समस्या ठीक हुई है या नहीं। अन्यथा, मैं व्यापार की समस्या के बारे में चिंता करने और कम समय टाइपिंग (फीचर की अनुमति देता है) के बारे में चिंता करने में अधिक समय व्यतीत करूंगा।

+5

क्षमा करें, इसका मतलब यह नहीं था कि कोई समस्या थी। हर्गिज नहीं। मैं हमेशा सिद्धांत के मामले में जीसी पर बोझ को कम करने के तरीकों की तलाश में हूं। जब भी मैं ढेर पर सामान डाल सकता हूं, मैं करता हूं। सरल प्रकार के रूप में सरल डेटा ट्रांसपोर्ट के रूप में सरल प्रकारों को सबसे अच्छी तरह से ढेर पर रखा जाएगा। – Boydski

+2

यदि आप अपने टूलबॉक्स से कोई टूल चुनने जा रहे हैं, तो आप बेहतर विकल्प चुन सकते हैं, जब तक कि विकल्प स्वयं समय बर्बाद न करे। –

12

अद्यतन:। सी # 7 अब मूल्य-प्रकार tuples, जो संदर्भों की एक ही प्रकार है कि संदर्भ प्रकार गुमनाम प्रकार में उपयोग किया जाता है में इस्तेमाल किया जा सकता है


इस सामान्य रूप से आयोजित हो रहा है विचार है कि मान प्रकार संदर्भ प्रकारों से "अधिक कुशल" हैं। यह पूरी तरह से पौराणिक है; वे कुछ परिचालनों के लिए अधिक कुशल हैं और दूसरों के लिए कम कुशल हैं।

उदाहरण के लिए, संदर्भ प्रकारों की तुलना में बड़े मूल्य प्रकार कम कुशल होते हैं यदि आप जिस काम की चिंतित हैं, वह "एक नए स्थान पर मूल्य कॉपी करें" कार्य है। एक संदर्भ प्रकार संदर्भित डेटा के आकार के बावजूद सूचक सूचक आकार का प्रतिलिपि बनाता है और इसलिए एक अत्यधिक अनुकूलित मशीन निर्देश में प्रतियां। एक मान प्रकार प्रत्येक बार डेटा के आकार की प्रतिलिपि बनाता है, जो काफी बड़ा हो सकता है और कई निर्देश ले सकता है।

भले ही, अनाम प्रकार पूरी तरह से सुविधा सुविधा हैं। यदि आपको उनकी प्रदर्शन विशेषताओं को पसंद नहीं है, तो आपको उनका उपयोग करने की आवश्यकता नहीं है। यदि आप चाहें तो आप अपनी खुद की संरचना को परिभाषित कर सकते हैं।

+18

क्षमा करें एरिक। सवाल अधिक सुरुचिपूर्ण हो सकता था। मुझे पूरी तरह से पता है कि यह संदर्भ के आसपास घूमता है। अधिक जटिल कार्यक्षमता के लिए मूल्य बनाम संदर्भ प्रकार चुनते समय हमेशा ज्ञान का उपयोग करना चाहिए। लेकिन मैंने देखा है कि एनन प्रकारों के अधिकांश उदाहरण लगातार वस्तुओं के छोटे उदाहरण (3 और 5 सदस्य मूल्यों के बीच) बनाते और नष्ट कर रहे हैं; वस्तु को ढेर के सामान्य 0 पर सरल डेटा के परिवहन के रूप में उपयोग किया जा रहा है। यह ढेर पर ऐसा करने से स्पष्ट रूप से अधिक महंगा है। मुझे अज्ञात प्रकार की शर्करा सुविधा पसंद है। लेकिन यह अभी भी बहुत अच्छा होगा कि रेफ बनाम मूल्य के बीच चयन करने में सक्षम होना अच्छा होगा। – Boydski

+0

हां यह एक सुविधा सुविधा है, जो एक विज्ञापन-हाउंड यौगिक प्रकार पर पुनरावृत्ति करने के लिए बहुत उपयोगी है जो कुछ जानकारी एकत्र करता है और आप कहीं और नहीं रखना चाहते हैं लेकिन वर्तमान में निष्पादन संदर्भ। –

-1

मैं कभी कभी गुमनाम वस्तुओं का उपयोग करें:

var x = new 
{ 
    itm0 = new { key = "key0", val = 0}, 
    itm1 = new { key = "key1", val = 1}, 
}; 
+0

क्या आपका उत्तर ओपी के प्रश्न का उत्तर दे रहा है? – nawfal

+2

आपका उत्तर गलत है या आप गलत प्रश्न का उत्तर दे रहे हैं। ओपी ने पूछा कि क्या हम अज्ञात structs बना सकते हैं। आप एम्बेडेड अनाम कक्षाओं के साथ एक अज्ञात वर्ग का निर्माण कर रहे हैं। –

2

कई उपयोग मामलों के लिए, गुमनाम प्रकार और tuples और अधिक कुशल हो सकता है अगर के रूप में अपरिवर्तनीय वर्गों की तुलना में सार्वजनिक क्षेत्र structs के रूप में लागू; चाहे कोई विशेष अनाम प्रकार या टुपल अधिक कुशल होगा क्योंकि ऐसी संरचना या एक अपरिवर्तनीय वर्ग विशेष रूप से इसके आकार का कार्य नहीं है, बल्कि इसका उपयोग कैसे किया जाता है। यदि किसी चीज को कभी भी बॉक्सिंग नहीं किया जा रहा है, तो कक्षा के विरुद्ध एक संरचना का उपयोग करने की सापेक्ष लागत आकार पर निर्भर करेगी और इस बात पर कितनी बार प्रतिलिपि बनाना होगा (ध्यान दें कि तथाकथित "अपरिवर्तनीय" structs अक्सर सार्वजनिक क्षेत्र के structs की तुलना में कई बार कॉपी करें)। यदि किसी चीज को निर्माण के बाद एक या दो बार कॉपी किया जाता है (कई उपयोग परिदृश्यों में आम), की सार्वजनिक क्षेत्र संरचना व्यावहारिक रूप से किसी भी आकार एक अपरिवर्तनीय कक्षा से बेहतर प्रदर्शन करेगी। दूसरी तरफ, यदि किसी चीज को अक्सर संदर्भ प्रकार के लिए मजबूर किया जाता है, तो एक अपरिवर्तनीय वर्ग एक संरचना, को काफी हद तक बेहतर प्रदर्शन करेगा, इससे कोई फर्क नहीं पड़ता कि कितना छोटा है।

कॉरर्सिंग संरचना प्रकारों की कीमत संदर्भ प्रकारों के लिए खर्च, और तथ्य यह है कि कुछ उपयोग मामलों को इतनी बार करने की आवश्यकता होगी, इसका मतलब है कि यहां तक ​​कि अगर अधिकांश अस्थायी वस्तुओं के लिए स्ट्रक्चर अपरिवर्तनीय वर्ग वस्तुओं की तुलना में अधिक कुशल होंगे, तो सब कुछ के लिए structs का उपयोग करके सब कुछ के लिए अपरिवर्तनीय वर्ग वस्तुओं का उपयोग करने से कम कुशल हो। उपयोग के मामले जहां structs कुल प्रदर्शन को 10% या उससे अधिक तक सुधारने की अनुमति देगा, शायद दो अलग-अलग प्रकार के टुपल्स और दो अलग-अलग प्रकार के अंतर्निहित अज्ञात प्रकारों की लागत को उचित ठहराने के लिए दुर्लभ हैं।कोड जिसे ओपन-फील्ड structs के प्रदर्शन फायदे की आवश्यकता होती है, आसानी से उनके सटीक उद्देश्यों के लिए संरचना प्रकारों को परिभाषित कर सकती है।

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