2012-12-05 9 views
10

के प्रदर्शन को बढ़ा सकता है मेरे पास मेरे कर्मचारी पृष्ठ में Response.Redirect है। यह वेतन पृष्ठ पर रीडायरेक्ट करता है।"एंड्रॉस्पॉन्स" एएसपी.Net पृष्ठ

Response.Redirect ("Salary.aspx"); 

यह ठीक काम कर रहा था जब तक कि मैंने नीचे अपवाद हैंडलिंग को जोड़ा नहीं। ।

try 
{ 
    Response.Redirect ("Salary.aspx"); 
} 
catch(Exception ex) 
{ 
//MyLog(); 
    throw new Exception(); 
} 

//Remaining code in event handler 

यह कोई नया अपवाद कह "थ्रेड निरस्त किया जा रहा था" की वजह से मुझे पता चला है कि इस endResponse रीडायरेक्ट के लिए के रूप में झूठी स्थापित करने से बचा जा सकता आया

Response.Redirect(url, false); 
Context.ApplicationInstance.CompleteRequest(); 

नया अपवाद की व्याख्या।: यह हमेशा अपवाद फेंकता है लेकिन ढांचे से संभाला जाता है। चूंकि मैंने कोशिश की है .. देखो, इसे वहां पकड़ा गया था (और मैं एक नया अपवाद फेंक रहा हूं)

नोट: CompleteRequest और HTTP फ़िल्टर और मॉड्यूल बाईपास करता है, लेकिन यह नहीं करता है टी बापा नहीं वर्तमान पृष्ठ जीवन चक्र

नोट: Response.Redirect वर्तमान पृष्ठ की अंतिम प्रसंस्करण के लिए इस अपवाद को फेंक दें। एएसपी .NET स्वयं इस अपवाद को संभालता है और प्रसंस्करण जारी रखने के लिए ResetAbort पर कॉल करता है।

प्रश्न

  1. चाहे "के रूप में झूठी endResponse सेटिंग" अपवाद के बाद से वृद्धि प्रदर्शन नहीं फेंका जाता है कर सकते हैं?
  2. चाहे "अंतराल को गलत के रूप में सेट करना" प्रदर्शन पृष्ठ जीवन चक्र घटनाओं को समाप्त नहीं कर सकता है?

ख़तरा

  1. आप false रूप endResponse सेट करते हैं, eventhandler में शेष कोड निष्पादित किया जाएगा। इसलिए हमें if शेष कोड की जांच करने की आवश्यकता है (जांचें: अगर पुनर्निर्देशन मानदंड पूरा नहीं हुआ था)।

संदर्भ

  1. Why Response.Redirect causes System.Threading.ThreadAbortException?
  2. ASP.NET exception "Thread was being aborted" causes method to exit
+0

'प्रदर्शन' को विभिन्न पहलुओं से माप लिया जा सकता है !!! आप वास्तव में क्या उम्मीद कर रहे हैं? –

+0

@huMptydu निम्नलिखित दृष्टिकोण से खाली प्रदर्शन 1) पृष्ठ प्रतिक्रिया समय 2) मेमोरी उपयोग – Lijo

+1

इसके अलावा, चूंकि आप अपनी वेबसाइट के प्रदर्शन में सुधार करने की कोशिश कर रहे हैं, यह [आलेख] (http://msdn.microsoft.com/en-us/magazine/cc163854 .aspx) कुछ जानकारी भी दे सकता है –

उत्तर

12

प्रतिक्रिया (Response.Redirect(url) या Response.Redirect(url, true)) समाप्त Response.Redirect(url, false) तुलना में बेहतर प्रदर्शन नहीं होगा। false के साथ, चूंकि आपके पास कोड निष्पादन पर नियंत्रण है, इसलिए आप उपयोगकर्ता को रीडायरेक्ट करने के दौरान मामले में किसी और कोड को निष्पादित नहीं कर सकते हैं।

यह Response.Redirect() के लिए MSDN entry में निर्दिष्ट किया जाता:

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

आपको पृष्ठ जीवन चक्र घटनाओं के बारे में चिंतित होने की आवश्यकता है, जैसा आपने नोट किया था। यदि आप उपयोगकर्ता को रीडायरेक्ट करने जा रहे हैं तो आपको पेज इवेंट निष्पादित करना जारी नहीं रखना चाहिए (न केवल प्रदर्शन के लिए)। मैंने हाल ही में खराब कोडिंग/योजना के साथ what can happen दिखाते हुए एक संक्षिप्त उदाहरण लिखा है यदि आप नहीं करते हैं।

उस पोस्ट की निचली पंक्ति यह है कि Response.Redirect() ब्राउज़र में 302 लौटाता है। 0 निष्पादन जारी होने के बाद Response.Redirect(url, false) का उपयोग करते समय समस्याएं होती हैं, और उपयोगकर्ता 302 को अनदेखा करना चुन सकता है और इसके बजाय प्रस्तुत किया गया पृष्ठ देख सकता है ... इसलिए आपको यह सुनिश्चित करने के लिए कदम उठाने होंगे ऐसा कुछ भी न देखें जिसे आप नहीं देखना चाहते हैं। फ़ायरफ़ॉक्स के लिए NoRedirect ऐड-ऑन इसका परीक्षण करते समय सहायक होता है।

सर्वश्रेष्ठ प्रदर्शन के लिए: endResponse पैरामीटर के रूप में उपयोग "false", सुनिश्चित करें कि आप किसी भी आगे के कोड नहीं चल रहे हैं, और यह सुनिश्चित पेज किसी भी जानकारी को प्रस्तुत करने के लिए नहीं जा रहा है आप एक उपयोगकर्ता हैं यह देखने के लिए नहीं करना चाहते वे 302 को अनदेखा करें।