2011-09-29 18 views
11

मैं अपने आवेदन के विशिष्ट हिस्सों की गति की जांच करने के लिए एमवीसी मिनी प्रोफाइलर का उपयोग कर रहा हूं, और अगर कुछ देर बाद होता है तो मुझे इसे वहां रखना चाहूंगा और मुझे "क्या गलत हो रहा है" की जांच करने की आवश्यकता हो सकती है। यह एक पूर्ण लॉग सेट नहीं है, लेकिन यह जानने में आसान है कि पेज को कितना समय लगता है।miniprofiler कैसे छिपाना है?

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

इस स्क्रीन पर उसका प्रदर्शन नहीं (एक दृश्य में कोड) की चाल किया है:

@if (Request.QueryString.AllKeys.Contains("showProfiler")) 
{ 
    @MvcMiniProfiler.MiniProfiler.RenderIncludes() 
} 

यह प्रयास है कि करीब हो गया है। सही रूप से मिनी प्रोफाइलर जानकारी को छुपाता है, लेकिन फिलहाल मैं इसे दिखाता हूं, यह सब कुछ प्रोफाइल करता है क्योंकि मैंने इसे दिखाना बंद कर दिया है। तो, मान लीजिए कि मैं अपना पेज प्रोफाइल करता हूं और इसमें 3 सेकंड लगते हैं। मैं क्वेरी पैरामीटर को हटाता हूं और पृष्ठ को तीन बार लोड करता हूं। मैं अपना पैरामीटर दोबारा जोड़ता हूं और मुझे प्रोफाइल जानकारी के 4 सेट दिखाई देते हैं। इसका तात्पर्य है कि यह सबकुछ का ट्रैक रखता है और मुझे आश्चर्य है कि अगर स्मृति समस्याएं हो सकती हैं।

प्रयास करने के लिए है कि अब और नहीं:

प्रयास 1:

protected void Application_BeginRequest() 
{ 
    if (Request.QueryString.AllKeys.Contains("showProfiler")) 
    { 
     MiniProfiler.Start(); 
    } 
} 

प्रयास 2:

protected void Application_EndRequest() 
{ 
    MiniProfiler.Stop(!Request.QueryString.AllKeys.Contains("showProfiler")); 
} 

प्रयास 3:

protected void Application_EndRequest() 
{ 
    MiniProfiler.Stop(true); 
} 

इनमें से कोई भी काम नहीं किया। कोई विचार?

+0

प्रयास 1 ऊपर दिए गए नमूने के साथ संयुक्त प्रयास, केवल ठीक काम करना चाहिए। –

उत्तर

12

home page प्रोफाइलर की ("एक प्रोफाइलर सत्र खंड को छोड़ देखें) उपयोग पैटर्न के लिए देख रहे है:

protected void Application_BeginRequest() 
{ 
    MvcMiniProfiler.MiniProfiler.Start(); 
} 
protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
    if(!CurrentUserIsAllowedToSeeProfiler()) 
    { 
     MvcMiniProfiler.MiniProfiler.Stop(discardResults: true); 
    } 
} 

आपका CurrentUserIsAllowedToSeeProfiler का कार्यान्वयन जांच करेगा यदि क्वेरी स्ट्रिंग में प्रोफाइलर ट्रिगर कुंजी है।


संपादित:

तुम भी उनके Example Project को देखो कि कैसे वे निश्चित स्थिति में इसे अक्षम लागू करते हुए देखना कर सकते हैं। उनकी जांच यह देखने के लिए है कि क्या आप इसे स्थानीयहोस्ट के माध्यम से एक्सेस कर रहे हैं, लेकिन आप इसके बजाय क्वेरी स्ट्रिंग को जांचने के लिए इसे बदल सकते हैं।

उस पर आधारित, ऐसा लगता है कि "प्रयास # 1" चाल होना चाहिए।ध्यान दें कि "जो नज़दीक है" और "प्रयास # 1" के बीच का अंतर पूर्व स्ट्रिंग profiling की तलाश में है, जबकि आपका प्रयास # 1 showProfiler की जांच कर रहा है। क्या यह अभी एक साधारण क्वेरी स्ट्रिंग मिक्सअप हो सकता है?

+0

धन्यवाद! वास्तव में पोस्ट बनाते समय पैरामीटर पर वर्तनी गलती मेरी समस्या थी, लेकिन प्रोजेक्ट में तार समान हैं। आपके उत्तर ने मुझे सेटिंग्स (जो मैंने पहले चेक नहीं किया था) और उस नमूना प्रोजेक्ट पर इंगित किया ... मैं इसमें से कुछ कोशिश करूंगा और आपको वापस ले जाऊंगा। – Alpha

+0

सेटिंग्स के पास कुछ भी नहीं था, जैसा कि आपने कहा था, उपयोग करने के लिए पैटर्न वह था जिसे आपने प्रस्तुत किया था। हालांकि, 'Application_AuthenticateRequest' को लागू करने की वास्तव में आवश्यकता नहीं है। यदि मैं एक सत्र को प्रोफाइल नहीं करना चाहता था तो मैंने मिनीप्रोफाइलर शुरू करने और परिणामों को छोड़ने (और परिणामों को छोड़कर) के समान 'Application_BeginRequest' विधि का हिस्सा उपयोग किया था। धन्यवाद! – Alpha

+0

@Alpha मैं सहमत हूं, प्रारंभिक अनुरोध पर AuthenticateRequest का उपयोग करने का कोई कारण नहीं है - मैंने इसे संदर्भ से क्रियान्वित करने के बाद से इसे स्रोत से कॉपी किया है क्योंकि मैंने इसे संदर्भ के रूप में उद्धृत किया है। – vcsjones

0

बस अपने प्रारंभ अनुरोध कार्यक्रम में सामान्य की तरह प्रोफाइलर शुरू करें। फिर अपने नियंत्रक या दृश्य में, क्वेरी स्ट्रिंग की जांच करें और प्रोफाइल डेटा को त्यागने के लिए MiniProfiler.Stop(true) पर कॉल करें यदि यह गलत नहीं है या सेट किया गया है।

protected void Application_BeginRequest() 
{ 
    MiniProfiler.Start(); 
} 
फिर अपने ध्यान में रखते हुए

:

@if(!Request.QueryString.AllKeys.Contains("profiling")) 
{ 
    MiniProfiler.Stop(true); 
} 
+0

यदि आप उस कोड को आपके पास हर नियंत्रक की हर कार्रवाई में डालते हैं तो यह बहुत बदसूरत हो सकता है। इस मामले में, शायद वैश्विक एक्शनफ़िल्टर या ग्लोबल.एक्सएक्स के माध्यम से एक सामान्य दृष्टिकोण बेहतर होगा? –

+0

यदि आप चेक को दोहराने से बचना चाहते हैं, तो आप इसे 'BeginRequest' ईवेंट में डाल सकते हैं, या अपने नियंत्रक में' OnActionExecuting' को ओवरराइड कर सकते हैं। –

+0

स्पष्ट के अलावा ... मिनीप्रोफाइलर को रोकना कितना अलग होगा। दृश्य() को 'अनुप्रयोग_इंडरक्वेट' विधि पर नहीं? यदि कोई नहीं, तो मैंने जो कोशिश की और जो भी आप सुझाव देते हैं, उसके बीच मुझे अंतर नहीं मिला। – Alpha

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