2012-02-29 10 views
6

हम डायनेमिक्स सीआरएम में एक जटिल इकाई संबंध 4.0नेस्ट usings बिना MVC मिनी प्रोफाइलर कदम

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

मैं वास्तव में अपने रचनाकारों और विभिन्न आलसी गेटर्स को प्रोफाइल करना चाहता हूं, लेकिन मैं इसे शीर्ष स्तर पर संभव बनाना चाहता हूं।

समस्या यह है कि, निश्चित रूप से, स्कोप - यदि मैं कन्स्ट्रक्टर को एक प्रयोग ब्लॉक में लपेटता हूं, तो यह किसी और चीज़ के लिए उपलब्ध नहीं है। यदि मैं उपयोग ब्लॉक का विस्तार करता हूं ताकि जो भी वस्तु मैं संदर्भित कर रहा हूं उसका संदर्भ देता हूं, तो प्रोफाइलर केवल कन्स्ट्रक्टर को प्रोफाइल नहीं कर रहा है - यह सबकुछ समय है।

इसी प्रकार, घोंसले का स्तर है, अगर मैं सही ढंग से उपयोग करता हूं, तो कोड अपठनीय हो जाता है।

मैंने प्रोफाइलर.इनलाइन पर एक नज़र डाली है लेकिन यह मेरे उद्देश्यों को पूरा नहीं करता है।

ref = Profiler.StartStep("Creating CRM Model"); 
//Do horrible CRM work 
var myNewHorribleObject = CRM.ModelHorribleStuff(...); 
Profiler.StopStep(ref); 

ref = Profiler.StartStep("How long does it take to get X"); 
var data = Repository.GetSomething(myNewHorribleObject.SomeId); 
Profiler.StopStep(ref); 

ref = Profiler.StartStep("How long does it take to get Y"); 
var newData = Repository.GetSomethingElse(myNewHorribleObject.ContextId); 
Profiler.StopStep(ref); 

कि मतलब क्या:

यह क्या मैं वास्तव में क्या करना चाहते हैं क्या है? उम्मीद है कि मैं मिनी प्रोफाइलर में कुछ देख रहा हूं, लेकिन मैं किसी भी सुझाव का स्वागत करता हूं!

मैं कोड को थोड़ा सा रीमोडल करना चाहता हूं, लेकिन इसके लिए कोई समय नहीं है और जब यह अजीब लगता है, तो वास्तव में हमारे पास एक अच्छी अच्छी चक्रीय जटिलता है।

उत्तर

7

हाँ यह संभव है। using का उपयोग करने के बजाय बस "MiniProfiler.Current.Step (" blah ")" का उपयोग करें। यह एक ऑब्जेक्ट वापस करेगा जो IDisposeable लागू करता है। जब उस वस्तु का वास्तव में निपटान किया जाता है तो समय कब रुक जाएगा। आप सामान्य की तरह using कथन के साथ चीजें घोंसला भी कर सकते हैं।

उदाहरण:

IDisposable executingStep; 
executingStep= MiniProfiler.Current.Step("Some code after this"); 
// do long code 
Thread.Sleep(100); 
using (profiler.Step("Step 2313")) 
{ 
    Thread.Sleep(100); 
} 
executingStep.Dispose(); 
+2

शानदार, धन्यवाद! –

+0

ध्यान दें कि यदि मिनीप्रोफाइलर प्रारंभ नहीं हुआ है तो निष्पादन चरण शून्य हो जाएगा, इसलिए आपको "अगर (execingStep! = Null) निष्पादन की आवश्यकता होगी चरण। इस मामले के लिए()" का प्रयास करें। – eddiegroves

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