फास्ट फ़ाइल I/O आपके द्वारा बनाए गए विशिष्ट API कॉल के बारे में कम है, बल्कि इसके बजाय आप अपने एप्लिकेशन को I/O के साथ काम करने के तरीके के बारे में बताते हैं।
आप उदाहरण के लिए, एक अनुक्रमिक तरीके से किसी एकल थ्रेड पर अपने आई/ओ कार्यों के सभी प्रदर्शन कर रहे हैं
स्मृति स्मृति में
- प्रक्रिया ब्लॉक किसी भी तरह
बाहर
- लिखें ब्लॉक में
- पढ़ें ब्लॉक
- दोहराएँ दायर करने के लिए जब तक किया ...
आप प्रक्रिया में सिस्टम के आई/ओ बैंडविड्थ bottlenecking कर रहे हैं एक धागे के लूप गाओ। एक वैकल्पिक, लेकिन अधिक जटिल डिज़ाइन थ्रूपुट को अधिकतम करने और प्रतीक्षा समय से बचने के लिए अपने एप्लिकेशन को मल्टीथ्रेड करना है। यह सिस्टम को सीपीयू और आई/ओ नियंत्रक बैंडविड्थ दोनों के साथ-साथ लाभ लेने की अनुमति देता है। इस के लिए एक विशिष्ट डिजाइन कुछ ऐसा दिखाई देगा:
- एक (या अधिक) कार्यकर्ता धागे डिस्क से डाटा पढ़ने के लिए और उन्हें एक साझा इनपुट कतार
- एक (या अधिक) कार्यकर्ता धागे से साझा ब्लॉक पढ़ने के लिए जोड़ने इनपुट कतार, उन्हें संसाधित करें और उन्हें साझा आउटपुट कतार
- साझा करें (एक और अधिक) कार्यकर्ता धागे साझा आउटपुट कतार से संसाधित संसाधित पढ़ते हैं और उचित आउटपुट फ़ाइलों को लिखते हैं।
यह सही डिजाइन करने के लिए एक आसान वास्तुकला नहीं है, और इसमें मेमोरी लॉक विवाद बनाने से बचने के लिए काफी कुछ विचार की आवश्यकता है, या समवर्ती I/O अनुरोधों के साथ सिस्टम को जबरदस्त कर दिया गया है। आपको नियंत्रण मेटाडेटा भी प्रदान करने की आवश्यकता है ताकि आउटपुट प्रोसेसिंग की स्थिति थ्रेड के कॉल स्टैक पर नहीं बल्कि इनपुट/आउटपुट वर्क कतार में प्रबंधित की जा सके। आपको यह भी सुनिश्चित करना होगा कि आप सही क्रम में आउटपुट को ट्रांसफॉर्म और लिखें, क्योंकि बहु-थ्रेडेड I/O के साथ आप सुनिश्चित नहीं हो सकते हैं कि इनपुट कतार पर एक गारंटीकृत क्रम में कार्य रखा गया हो। यह जटिल है - लेकिन यह संभव है, और यह धारावाहिक दृष्टिकोण पर थ्रूपुट में नाटकीय अंतर हो सकता है।
यदि आपके पास वास्तव में समय है और सिस्टम से प्रदर्शन के हर औंस को निचोड़ना चाहते हैं, तो आप थ्रूपुट को अधिकतम करने के लिए I/O completion ports - अपेक्षाकृत कम-स्तरीय API का उपयोग भी कर सकते हैं।
शुभकामनाएं।
मुझे नहीं पता कि WinAPI कॉल .NET कक्षाओं से कहीं अधिक तेज़ क्यों होना चाहिए - बाद में, बाद में आंतरिक रूप से पूर्व का उपयोग करें। इसके अलावा, क्या एक मेमोरी-मैप की गई फ़ाइल (http://en.wikipedia.org/wiki/Memory_mapped_file) शायद उपयुक्त हो? – Noldorin
Dot.net को फ़ाइल में लिखने के एक से अधिक तरीके क्यों होंगे? फ़ाइलों को पढ़ना और लिखना बहुत ही बुनियादी है और इसे "तेज़" और "धीमा" रूप में कोई समझ नहीं आता है - क्योंकि कोई भी "धीमी" संस्करण का उपयोग नहीं करेगा क्योंकि दोनों के पास समान उद्देश्यों हैं। –
आधे घंटे के भीतर मैं एक परीक्षण की तुलना कर सकता था .नेट फ़ाइल ऑपरेशंस (बेवकूफ कार्यान्वयन, शायद, जो प्रश्न का हिस्सा है) और गहन आईओ (जैसे कि क्विकएपी) के साथ एक मूल आवेदन जो .NET से दरवाजे को उड़ा देगा एप्लिकेशन। यह सवाल का मुद्दा है - आप .NET में इष्टतम डिस्क थ्रूपुट कैसे प्राप्त करते हैं? – Will