2009-07-24 9 views
10

जब आप ASP.NET में अपलोड की गई फ़ाइल प्राप्त करते हैं, तो आप आमतौर पर HttpPostedFile ऑब्जेक्ट के माध्यम से ऐसा करते हैं। प्राप्त डेटा HttpPostedFile.InputStream के माध्यम से उपलब्ध कराया गया है। यह एक संपत्ति है, जो मुझे विश्वास दिलाती है कि मुझे इसे स्वयं निपटाने की आवश्यकता नहीं है, हालांकि दस्तावेज कभी भी उल्लेख नहीं करता है कि धारा का निपटान करने के लिए ज़िम्मेदार है, और यदि यह एएसपी.नेट फ्रेमवर्क द्वारा किया जाता है, जब ऐसा करता है (कहो, क्या मैं सत्र में स्ट्रीम को सहेज सकता हूं, क्या मुझे चाहिए?)।HttpPostedFile.InputStream का निपटान करने के लिए कौन जिम्मेदार है - और कब?

अब, मुझे उन कई फाइलें नहीं मिलती हैं, और मैंने इस विशेष धारा का निपटान न करने के लिए समस्याओं में भाग नहीं लिया है, लेकिन स्वच्छता के लिए - क्या किसी को पता है कि यहां डिज़ाइन अनुबंध क्या है?

उत्तर

7

इसके साथ काम करने के अपने अनुभव से मैं कहूंगा कि अनुरोध प्रसंस्करण पूर्ण होने पर इसे जारी किया जाएगा। एक उदाहरण यह है कि अगर मैं हवा में गेंद को फेंकना चाहता था। अगर मैं इसे पकड़ नहीं पाता हूं और यह जमीन पर हिट करता है ... इसका निपटारा किया जाता है। अगर मैं इसे पकड़ता हूं और इसके साथ कुछ करता हूं ... और फिर इसे छोड़ दिया जाता है। अगले अनुरोध में खेलने के लिए यह आपके लिए चारों ओर लटका नहीं है!

सत्र में इसे संग्रहीत करने के मुद्दे को संबोधित करते हुए मैं NOOOOOO कहूंगा! यदि आपको इसे थोड़ी देर के लिए रहने की आवश्यकता है तो इसे फ़ाइल सिस्टम पर लिखें। जब आपको इसकी आवश्यकता होती है तो इसे फिर से स्ट्रीम के रूप में पुन: स्थापित करें और इसके साथ खेलो। सत्र में फ़ाइल स्ट्रीम को संग्रहीत करना (शायद बाइट सरणी के रूप में?) आपके सत्र (मेमोरी) संसाधनों की एक बड़ी अपशिष्ट की तरह लगता है।

+0

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

+0

भले ही आप इसे पृष्ठभूमि प्रक्रिया में सौंपना चाहते हैं ... जो करना बहुत अच्छा है ... मैं अभी भी फ़ाइल को फाइल सिस्टम में सहेजता हूं और उदाहरण को पास करने के बजाए फ़ाइल को आपके पृष्ठभूमि थ्रेड में संदर्भित करता हूं धारा का –

+0

यह देखते हुए कि इनपुटस्ट्रीम मेरे नियंत्रण से बाहर है, मैं निश्चित रूप से ऐसा कुछ करूँगा - लेकिन सामान्य रूप से, बाधाओं से बचने के लिए, मैं अस्थायी डिस्क पहुंच से बचना पसंद करता हूं - और अस्थायी बाइट सरणी के बावजूद अस्थायी कोई समस्या नहीं है। जानकारी के लिए धन्यवाद, किसी भी तरह! –

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