2012-11-07 14 views
10

मेरी वेब सेवा के अंदर, मैं स्थानीय डिस्क पर एक फ़ाइल में एक फाइलस्ट्रीम खोलता हूं। मैं इसे सेवा के जीवनकाल के लिए चारों ओर रखता हूं। प्रत्येक क्वेरी में आने के लिए, मैं डिस्क पढ़ने के लिए filestream का उपयोग करें। मैं प्रत्येक क्वेरी पर फ़ाइलस्ट्रीम को फिर से खोलने से बचने के लिए ऐसा करता हूं। इस पथ की लेटेंसी महत्वपूर्ण है (कुछ एमएस से कम होना चाहिए)। मैं डिस्क IO समय को 0.1ms या उससे कम रखने के लिए एसएसडी का उपयोग करता हूं।क्या सी # फिलस्ट्रीम लंबे समय तक खुला रहता है?

लंबे समय तक (दिन) पर फाइलस्ट्रीम 'खराब हो' (अमान्य हो सकता है) कर सकते हैं। क्या हर क्वेरी पर फाइलस्ट्रीम को फिर से खोलना सुरक्षित है? अगर मुझे फिर से खोलना है, तो एक बार फिर से एक बार फिर से एक बार फिर से खोलने का उपरांत क्या है?

+2

क्या कोई कारण है कि आप स्थिर स्मृति में फ़ाइलों को सामग्री लोड नहीं कर रहे हैं यदि आप विलंबता के बारे में चिंता कर रहे हैं? मुझे लगता है कि प्रश्नों को तेजी से सामग्री तक पहुंचने के बजाय आप किस पैटर्न का उपयोग कर रहे हैं। – AdamV

+2

फ़ाइल मेमोरी में फ़िट होने के लिए बहुत बड़ी है। मेरे पास एक इंडेक्स है जो मुझे सीधे ऑफसेट की तलाश करने और वहां से पढ़ने की सुविधा देता है। यह 1 आईओ से अधिक नहीं होना चाहिए। डेटा पढ़ने की मात्रा छोटी है। – user201511

+0

क्या आपने एक फ़ाइल स्ट्रीम खोलने और बंद करने के विरुद्ध एक फ़ाइल स्ट्रीम खोलने का प्रयास करने के लिए एक परीक्षण दोहन लिखा है। मैं सुझाव दूंगा कि आप इसके खिलाफ एक परीक्षण लिखने और परिणामों की तुलना करने का प्रयास करें। – AdamV

उत्तर

6

जब तक आपको आवश्यकता हो तब तक फ़ाइलों को खोलना सुरक्षित है।

क्या यह आपके मामले के लिए अच्छा है या नहीं - आपको स्वयं को तय करने की आवश्यकता है। फ़ाइल को पुन: खोलना धीमा नहीं होना चाहिए (यहां तक ​​कि नियमित ड्राइव पर भी), लेकिन आपको खुद को किसी भी रूप में कोशिश करने और मापने की आवश्यकता नहीं है, लेकिन आप अपने सटीक प्रदर्शन लक्ष्यों को जानते हैं।

+0

इसे उत्तर के रूप में चुनना, भले ही कोई अन्य अच्छी सलाह देता है, क्योंकि यह मेरे प्रश्न का एकमात्र सीधा जवाब है। – user201511

4

एकमात्र चिंता जो मैं फ़ाइल को खोलने के लिए छोड़ दूंगा, अगर आवेदन विफल हो गया है, किसी भी कारण से, और स्ट्रीम को बंद करने के लिए अपने वर्तमान स्थान से पुनर्प्राप्त नहीं हो सका; जो फ़ाइल खोलने के लिए प्रयोग किया जाता है KERNEL32 में CreateFile प्रवेश बिंदु निम्नलिखित बयान करता है:

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

तो मुझे लगता है कि यह हर बार FileStream खोलने और बंद करने के लिए अधिक उचित है।

+0

मैं सहमत हूं, लंबे समय तक पढ़ने के लिए एक फ़ाइल खोलने के लिए एक जोखिम की तरह लगता है और खुले के लिए सर्वोत्तम प्रथाओं के खिलाफ, संसाधन को बंद करने के बाद पढ़ना। – AdamV

+0

धन्यवाद, यह हर समय फिर से खोलने के लिए सही काम की तरह लगता है। – user201511

+0

@ user201511, कृपया इसे अपने और बाकी के समुदाय के उत्तर के रूप में चिह्नित करना याद रखें। –

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