2012-12-15 35 views
6

मेरे पास एएसपी.नेट एमवीसी एक्शन है जो OutputCache विशेषता से सजाया गया है, लेकिन समस्या यह है कि मिनीप्रोफाइलर आउटपुट भी कैश किया गया है। मैं कैशिंग (डोनट होल) से मिनीप्रोफाइल आउटपुट को बाहर करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि मैं मिनीप्रोफाइलर जैसे कॉल को कैसे बाहर कर सकता हूं। रेंडरइन शामिल है()।डोनट होल कैशिंग - मिनीप्रोफाइलर को शामिल करें। रेंडर शामिल है

कोई भी जो जानता है कि मैं यह कैसे कर सकता हूं?

+1

क्या इससे कोई फर्क पड़ता है? यदि पृष्ठ आउटपुट कैश से आता है तो कार्रवाई और नियंत्रक को इतना प्रोफाइलर नहीं कहा जाता है, वैसे भी कुछ भी नहीं दिखाएगा, नहीं? – Aliostad

+0

यह सर्वर-साइड के लिए वास्तव में एक अच्छा बिंदु है, लेकिन मिनीप्रोफाइलर भी डोम इत्यादि में लोड-टाइम के बारे में जानकारी आउटपुट करता है जो दिलचस्प होगा। – larsw

उत्तर

6

उत्पादन में मिनीप्रोफाइलर का उपयोग करते हुए यह एक महत्वपूर्ण बात है। जैसे कि किसी पृष्ठ की पहली विज़िट उस उपयोगकर्ता द्वारा होती है जहां मिनीप्रोफाइलर सक्षम होता है, उसके बाद के सभी अनुरोधों में मिनीप्रोफाइलर परिणाम DOM में शामिल होंगे (क्योंकि अब वे कैश किए गए हैं)। न केवल परिणाम गलत होंगे (क्योंकि वे केवल पहले लोड पर विचार करते हैं), लेकिन सभी आगंतुक आपके मिनीप्रोफाइलर परिणाम देख पाएंगे।

http://mvcdonutcaching.codeplex.com/

यह आपको कार्यों जो जब OutputCache का उपयोग कर कैश नहीं किया जाएगा जोड़ने के लिए अनुमति देता है:

सबसे पहले, डोनट छिद्र कैशिंग को सक्षम करने, मैं का इस्तेमाल कर रही हूँ।

उपरोक्त को देखते हुए, आप अपने लेआउट पेज से @using StackExchange.Profiling; हटा सकते हैं। इसके बाद आप बदल सकते हैं:

@MiniProfiler.RenderIncludes() 

के साथ:

@Html.Action("MiniProfiler", "DoNotCache", excludeFromParentCache: true) 

मैं एक DoNotCache नियंत्रक, इसलिए मेरे सभी गैर-संचित करने योग्य तत्व एक साथ हैं, लेकिन यह आवश्यक नहीं है और आप में इस कार्रवाई जगह कर सकते हैं बनाया है कोई नियंत्रक

@using StackExchange.Profiling; 
@{ 
    Layout = null; 
} 
@MiniProfiler.RenderIncludes() 

इससे यह सुनिश्चित होगा जब उचित हो, और यहां तक ​​कि स्थानों पर जहां आप DonutOutputCache एनोटेशन का उपयोग में उत्पादन में कैश नहीं MiniProfiler परिणाम प्रदर्शित किए जाते:

public ActionResult MiniProfiler() 
{ 
     return View(); 
} 

और फिर दृश्य में ही बस की तरह दिखता है।

+0

धन्यवाद - मैं इसे फिर से देखूंगा। – larsw