यह shown है कि 'as' कास्टिंग उपसर्ग कास्टिंग से बहुत तेज है, लेकिन 'प्रतिबिंब' के बारे में क्या है? यह कितना बुरा है? जैसा कि आप कल्पना कर सकते हैं, Google पर 'है' खोजना बहुत प्रभावी नहीं है।सी # में 'है' प्रतिबिंब की प्रदर्शन विशेषताओं क्या हैं?
उत्तर
कुछ ही विकल्प हैं:
- क्लासिक डाली:
Foo foo = (Foo)bar
as
डाली ऑपरेटर:Foo foo = bar as Foo
is
परीक्षण:bool is = bar is Foo
- क्लासिक डाली यदि
bar
सुरक्षित रूप सेFoo
(त्वरित) के लिए डाली जा सकती है, जांच करने के लिए की जरूरत है, और फिर वास्तव में इसे (धीमा), या एक अपवाद (वास्तव में धीमी गति से) फेंक देते हैं। as
ऑपरेटर अगरbar
डाली जा सकती है, जांच करने के लिए है, तो डाली करते हैं, या इसे सुरक्षित रूप से ढाला नहीं जा सकता है, तो यह सिर्फnull
रिटर्न की जरूरत।is
ऑपरेटर बस जांचता है किbar
को Foo पर डाला जा सकता है, औरboolean
लौटा सकता है। क्योंकि यह केवल एक पूर्ण कास्टिंग आपरेशन के पहले भाग करता
is
परीक्षण, त्वरित है। as
ऑपरेटर क्लासिक कास्ट से तेज़ है क्योंकि अगर कास्ट विफल रहता है तो अपवाद नहीं फेंकता है (जो उन परिस्थितियों के लिए अच्छा बनाता है जहां आप कानूनी रूप से उम्मीद करते हैं कि कास्ट विफल हो सकता है)।
तुम सिर्फ अगर चर bar
एक Foo
तो, is
ऑपरेटर, लेकिन का उपयोग आप अगर bar
एक Foo
है परीक्षण करने के लिए जा रहे हैं है पता करने के लिए की जरूरत है, और अगर ऐसा है, तो यह डाली, तो आपको as
ऑपरेटर का उपयोग करना चाहिए।
अनिवार्य रूप से प्रत्येक कलाकार को is
के बराबर करने की आवश्यकता होती है ताकि यह सुनिश्चित किया जा सके कि कलाकार मान्य है। तो यदि आप एक पूर्ण कास्ट (या तो as
कास्ट, या क्लासिक कास्ट ऑपरेटर के साथ) is
प्रभावी ढंग से कर रहे हैं, तो is
जांच करें, जो थोड़ा अतिरिक्त ओवरहेड है।
चेक सबसे धीमा है, कास्ट संदर्भ प्रकारों पर बहुत तेज़ है, क्योंकि यह संदर्भ को वापस देता है। –
इस एक जवाब ने मुझे विचार प्राप्त करने में मदद की .. – nawfal
"है" मूल रूप से "isinst" आईएल ऑपरेटर के बराबर है - जो कि लेख तेजी से वर्णन करता है।
इससे कोई फर्क नहीं पड़ता कि यह जल्दी से पर्याप्त होना चाहिए।
if (obj is Foo) {
Foo f = (Foo)obj;
f.doSomething();
}
इस की तुलना में धीमी है: आप एक वस्तु के लिए पर्याप्त के प्रकार की जाँच कर रहे हैं यह प्रदर्शन पर एक प्रत्यक्ष प्रभाव है कि आप अपने डिजाइन जिस तरह से मुझे पता चला पुनर्विचार करने
की जरूरत बनाने के लिए के लिए यह है कि यह है:
Foo f = obj as Foo;
if (f != null) {
f.doSomething();
}
क्या इससे कोई फर्क पड़ता है? शायद नहीं, लेकिन ध्यान देने के लिए यह एक साधारण बात है, कि आप इसे भी कर सकते हैं।
- 1. प्रदर्शन स्मृति की विशेषताओं फ़ाइल
- 2. प्रदर्शन T-SQL की विशेषताओं सीटीई
- 3. प्रतिबिंब प्रदर्शन - प्रतिनिधि बनाएं (गुण सी #)
- 4. .NET प्रतिबिंब की "लागत" क्या है?
- 5. सी # "है" ऑपरेटर - क्या वह प्रतिबिंब है?
- 6. मैं डाटा एनोटेशन विशेषताओं और प्रतिबिंब
- 7. उद्देश्य-सी प्रतिबिंब है?
- 8. सी # विशेषताओं के साथ प्रतिबिंब के माध्यम से संपत्ति मूल्यों की स्थापना
- 9. जावा: जेआईटीसी की प्रतिबिंब मुद्रास्फीति क्या है?
- 10. जावा प्रतिबिंब रन-टाइम प्रदर्शन
- 11. जावा/सी # आदि 0 में प्रतिबिंब का उपयोग क्या है
- 12. कोर डाटा - वैकल्पिक विशेषताओं और प्रदर्शन
- 13. आईवी ब्रिज पर RDRAND की थकावट विशेषताओं क्या हैं?
- 14. सी # प्रतिबिंब
- 15. सी प्रतिबिंब
- 16. सी #: प्रतिबिंब
- 17. सी # प्रतिबिंब
- 18. सी # प्रतिबिंब
- 19. प्रतिबिंब .NET में अच्छा प्रदर्शन क्यों नहीं करता है?
- 20. सी # में प्रतिबिंब क्या है? हम इस अवधारणा का उपयोग हमारे आवेदन में कहां करते हैं?
- 21. "monadic प्रतिबिंब" क्या है?
- 22. .NET में प्रतिबिंब क्या उपयोग है?
- 23. प्रदर्शन बोतल गर्दन संकलित सी ++ क्या है?
- 24. PropertyGrid विशेषताओं की सूची
- 25. गेटटाइप() और GetTypes() जैसे प्रतिबिंब एपीआई का प्रदर्शन कैसा है?
- 26. 3 मिनट में, प्रतिबिंब क्या है?
- 27. सी # संपत्ति विशेषताओं
- 28. सी ++ 11 प्रतिबिंब पुस्तकालय
- 29. सी/सी ++ विशेष सीपीयू विशेषताओं का उपयोग
- 30. सी # - रिकर्सिव/प्रतिबिंब संपत्ति मूल्य
'है' बहुत तेज़ है। –
मुझे एहसास है कि डुप्लिकेट प्रश्नों को बंद करने में तारीख एकमात्र निर्धारण कारक नहीं है, लेकिन मेरा प्रश्न पोस्ट किया गया था और अन्य प्रश्न पोस्ट किए जाने से पहले उत्तर दिया गया था। _It_ डुप्लिकेट है, यह नहीं। –