IHttpHandler.IsReusable के लिए क्या उपयोग है?


104

मैं एक लिख रहा हूं IHttpHandlerऔर मुझे एक IsReusableसंपत्ति को लागू करने की आवश्यकता होगी । जब मैं MSDN प्रलेखन को देखता हूं तो यह कहता है:

एक मान बताता है कि क्या अन्य अनुरोध IHttpHandler उदाहरण का उपयोग कर सकता है।

यह बहुत मददगार नहीं है। मुझे किन स्थितियों में एक पुन: प्रयोज्य हैंडलर का उपयोग करना चाहिए और किन स्थितियों में इसे पुन: उपयोग करने योग्य नहीं होना चाहिए?

अनुवर्ती प्रश्न:

  1. पुन: उपयोग क्या है?
  2. क्या मैं राज्य (यानी वर्ग चर) बनाए रख सकता हूं जब Reusable = true??

9
: यहाँ एक नज़र foreachbiscuit.wordpress.com/2007/11/01/...
होमैम

"पुन: उपयोग" का अर्थ है हैंडलर के किसी विशेष उदाहरण के साथ एक से अधिक अनुरोध को संभालना। आप सत्र में कुछ भी स्टोर कर सकते हैं - हैंडलर का उदाहरण जारी होने पर यह प्रभावित नहीं होगा।
आइरिशचेयर 16

@IishChieftain यह ऐसा है। नेट तत्काल HttpHandlers का एक बैग रखता है, एक को चुनता है और इसे केवल एक संदर्भ खिलाता है?
कीस सी। बकर

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

जवाबों:


93

यह गुण इंगित करता है कि क्या एकाधिक अनुरोधों को समान IHttpHandler उदाहरण के साथ संसाधित किया जा सकता है। एक अनुरोध पाइपलाइन के अंत में डिफ़ॉल्ट रूप से HttpApplication के हैंडलरRecycleList में रखे गए सभी http हैंडलर को शून्य पर सेट किया गया है। यदि कोई हैंडलर पुन: उपयोग करने योग्य है, तो उसे शून्य पर सेट नहीं किया जाएगा और अगले अनुरोध में उदाहरण का पुन: उपयोग किया जाएगा।

मुख्य लाभ प्रदर्शन है क्योंकि कचरा-संग्रह करने के लिए कम वस्तुएं होंगी।
पुन: प्रयोज्य हैंडलर के लिए सबसे महत्वपूर्ण दर्द-बिंदु यह है कि यह थ्रेड-सुरक्षित होना चाहिए। यह तुच्छ नहीं है और इसके लिए कुछ प्रयास करने की आवश्यकता है।

मैं व्यक्तिगत रूप से सुझाव देता हूं कि यदि आप केवल प्रबंधित संसाधनों का उपयोग करते हैं तो आप डिफ़ॉल्ट मान (पुन: प्रयोज्य नहीं) को छोड़ देते हैं क्योंकि कचरा कलेक्टर आसानी से उन्हें संभालना चाहिए। पुन: प्रयोज्य हैंडलर से प्रदर्शन लाभ आमतौर पर नगण्य है जो थ्रेडिंग बग्स को खोजने के लिए कठिन शुरूआत करने के जोखिम की तुलना में है।

यदि आप हैंडलर का पुन: उपयोग करने का निर्णय लेते हैं, तो आपको क्लास वेरिएबल्स में स्थिति बनाए रखने से बचना चाहिए क्योंकि यदि हैंडलर का उपयोग समवर्ती रूप से किया जाता है, तो कई अनुरोध मानों को लिखेंगे / पढ़ेंगे।


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

2
ज़रूर। मैंने पिछली सिफारिश पर जोर देते हुए कहा है कि यह तभी लागू होगा जब IHttpHandler का पुन: उपयोग किया जाएगा। स्पष्टीकरण के लिए धन्यवाद, बेन!
ब्रानिसिलव अबादजीमारिनोव

7
इसके लायक क्या है, मैंने कई लागू किए हैं, कई सेट के IHttpHandlerसाथ हैं और कोई समस्या नहीं है। ध्यान रखने वाली मुख्य बात यह है कि किसी भी चर को वर्ग में नहीं रखा गया है, बल्कि अपने कार्यों में स्थानीय चर का उपयोग करें। IsReusabletrue
दाना

6
महान व्याख्या। स्पष्ट और बात तक। काश MSDN लेख इस संक्षिप्त थे।
एलेक्सवैल

1
@Branislav - अगर मैं आपका जवाब सही समझता हूँ। विभिन्न थ्रेड्स के लिए न केवल हैंडलर के विभिन्न उदाहरणों का उपयोग करना संभव है, बल्कि विभिन्न थ्रेड्स के लिए संभव है कि हैंडलर के एसएएमई उदाहरण को समवर्ती रूप से निष्पादित किया जाए?
इयान

11

जाहिरा तौर पर, यह हैंडलर को स्मृति में रखता है और कई अनुरोधों को संभालने में सक्षम है। जब इसे गलत पर सेट किया जाता है, तो इसे प्रत्येक आने वाले अनुरोध के लिए हैंडलर का एक नया उदाहरण बनाना होगा।

यहाँ एक सवाल है जो दिखाता है कि क्या होता है जब इसका ठीक से उपयोग नहीं किया जाता है:

HttpHandler का उपयोग करते हुए Databased छवियाँ स्ट्रीमिंग


क्या आपके पास अपना उत्तर देने के लिए कुछ दस्तावेज हैं?
कीस सी। बक्कर

4
आप की तरह मुझे MSDN पर कोई संतोषजनक दस्तावेज़ नहीं मिल सकता है इसलिए मुझे एक डेटाबेस से छवियों को लोड करने का परीक्षण एक ई-कॉमर्स साइट के एक पृष्ठ पर करना था, और फिर जो हुआ उसका अवलोकन करें :)
आयरिशक्रिटर्ट

5

हर बार रिक्वेस्ट आने के बाद हैंडलर को नए सिरे से रीसायकल करना सस्ता पड़ता है और सर्वर मेमोरी को कम कर देगा, जिससे जीसी को काम करने में आसानी होगी। यदि हैंडलर एक ऐसी स्थिति में है जहां एक नए अनुरोध के साथ काम करना समस्याग्रस्त नहीं होगा (यानी हैंडलर उदाहरण में किसी भी राज्य को रीसेट किया गया है) , तो इसे पुन: प्रयोज्य होने के रूप में योग्य होना चाहिए।

संपादित करें

मुझे यकीन नहीं है कि अगर मेरा जवाब सही ढंग से परिभाषित करता है कि पुन: उपयोग क्या है। यह वास्तव में समवर्ती पुन: उपयोग के लिए अनुमति देता है, इसलिए प्रभावी रूप से राज्य को सबसे सुरक्षित रूप से टाला जाएगा या सावधानीपूर्वक थ्रेड-सुरक्षित तरीके से प्रबंधित किया जाएगा।


मुझे भी ऐसा लगता होगा। आप सही हैं, वास्तविक (मौलिक) प्रश्न है: 'पुन: उपयोग क्या है?'
कीस सी। बकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.