2010-12-18 15 views
16

का उपयोग कर एक फ़ंक्शन का समय मैं एक विशेषता का उपयोग करके एक फ़ंक्शन का समय चाहता हूं। मैं कुछ इस तरह करना चाहते हैं:सी # विशेषता

[TimeIt] 
public MyFunc() 
{ 
//do something 
... 
return; 
} 
इस समारोह के निष्पादन पर

, अगर समय समारोह द्वारा लिए गए एक सीमा से ऊपर है, विशेषता समय log4net का उपयोग कर लॉग इन करना चाहिए।

यह एमवीसी एक्शनफिल्टर एट्रिब्यूट के समान है, सिवाय इसके कि मैं एमवीसी का उपयोग नहीं करना चाहता हूं।

+2

पोस्टशर्प ऐसा कुछ करता है - दुर्भाग्यवश यह मुफ़्त नहीं है: http://www.sharpcrafters.com/postsharp –

+0

कैसल होगा। डायनामिकप्रॉक्सी यहाँ काम करेगा? उत्तर के रूप में सबमिट नहीं किया जा रहा है क्योंकि यह वास्तव में एक प्रश्न है। – Amy

उत्तर

13

गुण मेटाडाटा केवल (जैसे [PrincipalPermission] के रूप में कुछ बहुत कुछ अपवादों को छोड़कर जो क्रम से ही देखा जाता है) के साथ कर रहे हैं; तो जादुई रूप से आवंटित करने के लिए अतिरिक्त कोड का कारण बनता है। इसका अपवाद PostSharp जैसे टूल के माध्यम से है, जो बिल्ड समय पर अतिरिक्त गुणों में ऐसे गुण और बुनाई का पता लगाता है।

अन्य सभी मामलों में आपको प्रतिबिंब के माध्यम से इस विशेषता को स्वयं जांचना होगा, और विशेषताओं से अतिरिक्त विधियों को आमंत्रित करने के लिए कोड लिखना होगा। यह एएसपी.नेट एमवीसी करता है; यह गुणों के अपेक्षित परिवार की पहचान करता है और आपके फ़िल्टर को आग लगने के लिए बेस-क्लास विधियों को कॉल करता है।

यदि आप एक प्लगइन ढांचे लिख रहे हैं, तो यह समझ में आ सकता है। यदि यह विज्ञापन-प्रक्रिया विधि वाद्ययंत्र के लिए है - यह आपके अतिरिक्त कोड जोड़ने के बिना काम नहीं करेगा।

IDisposable टाइप लिखना आसान हो सकता है जो इसे डिस्पोजेड होने पर समाप्त समय लिखता है; तो आप कर सकता है:

using(new MyTimer("My label")) { 
    //... Your method 
} 

शायद using के एक मामूली दुरुपयोग लेकिन यह काम करना चाहिए।

+0

अच्छा संक्षिप्त स्पष्टीकरण। –

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