यह सटीक परिदृश्य पर बहुत निर्भर करेगा - लेकिन इसमें कैशिंग की एक परत है, इसलिए यह उतना भयानक नहीं है जितना आप उम्मीद कर सकते हैं (यह हर बार प्रतिबिंब नहीं करता है)। यह संचालन पर भी भिन्न हो सकता है (उदाहरण के लिए, "उठाया" शून्य-टी ऑपरेशंस काफी धीमे हैं)। आप को मापने के लिए की आवश्यकता होगी, लेकिन के रूप में यह होता है मैं सदस्य (संपत्ति) पहुँच के लिए यहाँ कुछ समय है, कि मैं ले लिया जब FastMember कर:
Static C#: 14ms
Dynamic C#: 268ms
PropertyInfo: 8879ms (aka reflection)
PropertyDescriptor: 12847ms (aka data-binding)
TypeAccessor.Create: 73ms (aka FastMember)
ObjectAccessor.Create: 92ms (aka FastMember)
चेतावनी: इन एक एकल परीक्षण है कि के प्रतिनिधि नहीं हो सकता है के लिए कर रहे हैं आपका परिदृश्य एक साधारण परीक्षण, के बारे में 20 बार की तुलना में स्थिर नियमित सी # धीमी पर आधारित है, लेकिन प्रतिबिंब से लगभग 30 गुना तेजी से: इस कोड shown here
तो है।
अद्यतन: दिलचस्प, लगता है प्रतिबिंब .NET 4.5 में तेज़ हो गया है:
Static C#: 13ms
Dynamic C#: 249ms
PropertyInfo: 2991ms
PropertyDescriptor: 6761ms
TypeAccessor.Create: 77ms
ObjectAccessor.Create: 94ms
यहाँ यह केवल बारे में 12 बार प्रतिबिंब की तुलना में तेजी है, क्योंकि प्रतिबिंब तेजी से (नहीं है क्योंकि गतिशील धीमी मिला) मिला है।
स्रोत
2012-11-02 10:56:56
क्या आप 'गतिशील सी #' परीक्षण को स्पष्ट कर सकते हैं: क्या आपने पहली कॉल के लिए समय माप लिया था, या बाद में (कैश) एक? मैं पूर्व मानता हूं और बाद में कॉल बहुत तेज़ हैं, लेकिन यकीन नहीं है। (मुझे पता है कि मैं इसे स्वयं परीक्षण कर सकता हूं, लेकिन मेरा मानना है कि भविष्य के पाठकों को स्पष्टीकरण से भी फायदा होगा;) – enzi