यह देखते हुए कि मेरे पास केवल ControllerContext
तक पहुंच है और Action____Contexts
वर्तमान निष्पादन एक्शनडिस्क्रिप्टर प्राप्त करने का सबसे अच्छा तरीका क्या है?कंट्रोलर कॉन्टेक्स्ट से एक्शन डिस्क्रिप्टर
अब तक केवल विधि मैंने पाया है:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
इस इष्टतम विधि है?
तथ्य यह है कि कक्षा का नाम ReflectedControllerDescriptor
है, मुझे आश्चर्य है कि इस ऑपरेशन के लिए भारी लागत है क्योंकि इसे प्रत्येक पृष्ठ अनुरोध पर निष्पादित किया जाएगा? इससे संबंधित यह वर्ग आंतरिक रूप से कैश करता है या क्या मुझे वास्तव में ReflectedControllerDescriptors
कैशिंग करनी चाहिए?
एमवीसी स्रोत में कुछ खुदाई करना जो कि आप पहले से ही कर रहे सभी कार्यों को कॉपी किए बिना सबसे अधिक अनुकूल तरीका है। हालांकि, मुझे नहीं लगता कि आप पाए गए कार्यों को कैश क्यों नहीं कर पाएंगे ताकि बाद के कार्य अधिक प्रदर्शनशील हों। – Buildstarted
इसके अलावा प्रतिबिंबित नियंत्रक डिस्क्रिप्टर क्रियाएं प्राप्त करने के लिए प्रतिबिंब का उपयोग करता है क्योंकि यह न केवल विधियों को देखता है बल्कि विधियों से जुड़ी विशेषताओं को भी देखता है। (प्रतिबिंबित नियंत्रक डिस्क्रिप्टर भी परिणामों को कैश करता है) – Buildstarted
@ बिल्डल्डस्टार्ट इसलिए 'प्रतिबिंबित नियंत्रक डिस्क्रिप्टर' के अंदर प्रतिबिंब उपयोग वास्तव में कैश किया गया है, लेकिन तर्कसंगत रूप से मैं FindAction पर अपनी कॉल कैश कर सकता हूं? –