2011-06-20 18 views
6

मैं प्रतिबिंब एपीआई जैसे GetType() और GetTypes() .NET/C# में उपयोग करता हूं।गेटटाइप() और GetTypes() जैसे प्रतिबिंब एपीआई का प्रदर्शन कैसा है?

  • प्रदर्शन के संदर्भ में, उन एपीआई कितने अच्छे या बुरे हैं? मेरा मतलब है, क्या इन एपीआई में अधिक समय लगता है जो कुछ प्रदर्शन गिरावट का कारण बन सकता है, या क्या ये एपीआई प्रदर्शन समस्याओं को अनदेखा करने के लिए डिज़ाइन की गई हैं?
  • आम तौर पर लोग प्रतिबिंब एपीआई का उपयोग करते समय परिणामों को कैश करते हैं?
+0

क्या अच्छा या बुरा सापेक्ष है? –

उत्तर

6

हम नहीं जानते कि आपको "अच्छा" और "बुरा" क्या मतलब है।

हम नहीं जानते कि आप इन महत्वपूर्ण प्रदर्शन कोड में उपयोग कर रहे हैं जो आपके आवेदन के लिए बाधा होने की संभावना है।

केवल Object.GetType और Assembly.GetTypes का उपयोग करते समय आपके कोड को ठीक से पता चल जाएगा।

इसलिए, केवल आप ही जांच सकते हैं कि इन तरीकों का उपयोग आपके आवेदन के प्रदर्शन पर कितना सार्थक होगा, और कैशिंग के माध्यम से प्रदर्शन को बढ़ावा देने के लिए कितना फायदेमंद होगा।

मैं आप इस बता सकते हैं: मैंने कभी नहीं पड़ा है Type.GetType और Assembly.GetTypes अपने आवेदन में अड़चन हो, और मैं परिणामों को कैश नहीं है (मैं है, तथापि, MemberInfo.GetCustomAttributes कैश करने के लिए की जरूरत है, लेकिन मैं केवल उसके बाद निष्कर्ष पर पहुंचा एक प्रोफाइलर ने मुझे बताया कि यह मेरे आवेदन में एक महत्वपूर्ण बाधा थी और कैशिंग प्रदर्शन में काफी सुधार करेगी)।

अपने संपादित इस पर प्रतिक्रिया:

मेरा मतलब है, इन API ज्यादा समय है कि कुछ प्रदर्शन में ख़राबी हो सकता है ले, या इन API अच्छी तरह से प्रदर्शन के मुद्दों की अनदेखी करने के तैयार कर रहे हैं कर रहे हैं?

आपके पास क्या विकल्प हैं? यदि आपको किसी दिए गए ऑब्जेक्ट के लिए Type के संदर्भ की आवश्यकता है, या आपको किसी दिए गए असेंबली में सभी प्रकार की आवश्यकता है, तो मैं आपको आश्वस्त करता हूं कि Object.GetType और Assembly.GetTypes आपकी सबसे अच्छी पसंद हैं। सवाल यह है कि आप उनका उपयोग कैसे कर रहे हैं? दोबारा, हम नहीं जानते, और इसलिए आपको नहीं बता सकते कि क्या करना है। आपको इन कार्यों के अपने असली दुनिया के उपयोग को प्रोफाइल करना होगा और यह पता लगाना होगा कि क्या वे आपके आवेदन में बाधा उत्पन्न कर रहे हैं या नहीं।

4

वे दोनों बेहद अच्छे प्रदर्शन और बेहद खराब प्रदर्शन कर रहे हैं। यह सब आपके परिप्रेक्ष्य और तुलना पर निर्भर करता है।

प्रतिबिंब एपीआई सर्वर एक उद्देश्य है और उन एपीआई के अधिकांश उपयोगों में वे एक बाधा उत्पन्न नहीं करेंगे। उन्हें इस्तेमाल करें।

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

अधिकांश ORMs प्रतिबिंब का उपयोग इकाई वस्तुओं को भरने के लिए है और यह प्रदर्शन टोंटी बन सकता है के बाद से इस है कि बहुत अधिक मात्रा में बार-बार किया जाता है कुछ है। कुछ नए माइक्रो-ऑर रनटाइम जेनरेटेड क्लासेस का उपयोग कर रहे हैं जो प्रतिबिंब के बिना इकाइयों का निर्माण कर सकते हैं (Reflection.Emit का उपयोग करके)। हमारी परियोजना में हम प्रत्येक इकाई के लिए बिल्डर्स बनाने के लिए संकलित-समय जेनरेट कक्षाओं का उपयोग करते हैं। संकलन समय उत्पन्न आसान है और अगर यह अपनी स्थिति में काम करता है सबसे अच्छा प्रदर्शन है।

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