2009-12-07 10 views
40

मेरे पास एक ऐसा एप्लिकेशन है जो नेटवर्क पर डेटा के हिस्सों को प्राप्त करता है, और इन्हें डिस्क पर लिखता है। एक बार सभी हिस्सों को प्राप्त करने के बाद, उन्हें वास्तव में प्रतिनिधित्व की जाने वाली एकल फ़ाइल में डीकोड/पुनः संयोजित किया जा सकता है।स्मृति-मैप की गई फ़ाइलों का उपयोग कब करें?

मैं सोच रहा हूँ अगर यह स्मृति-मैप की गई फ़ाइलों या नहीं का उपयोग करने के लिए उपयोगी है - दूसरा जिसमें उन सभी को डीकोड कर रहे हैं एकल फ़ाइल के लिए, पहली डिस्क के लिए एक हिस्सा लिखने के लिए।

मेरी खुद की भावना यह है कि यह केवल दूसरे मामले के लिए उपयोगी हो सकता है, किसी को भी इस पर कुछ विचार हैं?

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

+0

अच्छी कॉल, मैंने अपनी पोस्ट को विस्तृत करने के लिए संपादित किया है - यह एक x64-only ऐप होगा। – Pygmy

+1

आपको एक एमएम फ़ाइल का उपयोग करने के बारे में क्या सोचने के लिए आपको लगता है? –

+0

गति आमतौर पर mmap'ed फ़ाइलों का प्राथमिक लाभ नहीं है? –

उत्तर

25

मेमोरी-मैप की गई फ़ाइलें परिदृश्यों के लिए फायदेमंद हैं जहां काफी बड़ी फ़ाइल के अपेक्षाकृत छोटे हिस्से (दृश्य) को बार-बार उपयोग किया जाना चाहिए।

इस परिदृश्य में, ऑपरेटिंग सिस्टम मैप किए गए फ़ाइल के सबसे हाल ही में उपयोग किए गए हिस्सों में और बाहर पेजिंग करके एप्लिकेशन के समग्र मेमोरी उपयोग और पेजिंग व्यवहार को अनुकूलित करने में सहायता कर सकता है।

इसके अतिरिक्त, मेमोरी-मैप की गई फाइलें प्रति-ऑन-राइट जैसे रोचक विशेषताओं का खुलासा कर सकती हैं या साझा-स्मृति के आधार के रूप में कार्य करती हैं।

आपके परिदृश्य के लिए, स्मृति-मैप की गई फाइलें फ़ाइल को इकट्ठा करने में आपकी सहायता कर सकती हैं यदि भाग क्रम से बाहर निकलते हैं। हालांकि, आपको अभी भी अंतिम फ़ाइल आकार को पहले से ही जानना होगा।

इसके अलावा, आपको एक बार लिखने के लिए केवल एक बार फ़ाइलों तक पहुंचना चाहिए। इस प्रकार, स्पष्ट रूप से कार्यान्वित एसिंक्रोनस I/O पर एक प्रदर्शन लाभ असंभव है, लेकिन यह आपके फ़ाइल लेखक को सही ढंग से कार्यान्वित करना आसान और तेज़ हो सकता है।

इन।नेट 4, माइक्रोसॉफ्ट ने मेमोरी मैप की गई फ़ाइलों के लिए समर्थन जोड़ा और नमूना कोड के साथ कुछ व्यापक लेख हैं, उदा। http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx

+4

मैं असहमत हूं कि एमएमएफ केवल छोटे विचारों के लिए हैं। 64 बिट सिस्टम पर आप आसानी से पूरी फाइल पर एक दृश्य डाल सकते हैं। एक दृश्य पुन: स्थिति एक महंगा आईओ ऑपरेशन है। –

+2

आप सही हैं। इन्हें मनमाने ढंग से बड़े या पूर्ण-फ़ाइल दृश्यों के लिए उपयोग किया जा सकता है, विशेष रूप से 64-बिट पता स्थान पर। लेकिन यह वह जगह नहीं है जहां वे चमकते हैं, विशेष रूप से, जब फ़ाइल को केवल एक बार पढ़ा या लिखा जा रहा है। मेरा मुद्दा यह है कि, ऐसे मामलों में async I/O उतना ही कुशल होगा, लेकिन सही ढंग से कार्यान्वित करना कठिन है। – user33675

3

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

12

मेमोरी-मैप की गई फ़ाइलों का मुख्य रूप से इंटर-प्रोसेस संचार या I/O प्रदर्शन सुधार के लिए उपयोग किया जाता है।

आपके मामले में, क्या आप बेहतर I/O प्रदर्शन प्राप्त करने का प्रयास कर रहे हैं?

obivious बताते नफरत, लेकिन विकिपीडिया स्थिति का एक अच्छा ठहरनेवाला देता है ... http://en.wikipedia.org/wiki/Memory-mapped_file

विशेष रूप से ...

स्मृति मैप किए गए दृष्टिकोण नाबालिग पेज दोष में इसकी लागत है - जब पृष्ठ कैश में डेटा का एक ब्लॉक लोड होता है, लेकिन अभी तक प्रक्रिया की वर्चुअल मेमोरी स्पेस में मैप नहीं किया जाता है। परिस्थितियों के आधार पर, मेमोरी मैप की गई फ़ाइल I/O वास्तव में मानक फ़ाइल I/O से काफी धीमी हो सकती है।

ऐसा लगता है कि आप गति के लिए समय-समय पर अनुकूलित करने वाले हैं। क्यों नियमित फ़ाइल दृष्टिकोण नहीं है, और फिर आवश्यकता होने पर बाद में एमएम फाइलों के लिए रिफैक्टर?

+2

मैं बेहतर आईओ प्रदर्शन के लिए लक्ष्य रख रहा हूं। मुझे अब लगभग 12 एमबी/सेकंड डेटा मिल रहा है (लेकिन भविष्य में यह बहुत अधिक होगा) और इसे जितनी जल्दी हो सके डिस्क पर वापस लिखने में सक्षम होने की आवश्यकता है। मैंने विकिपीडिया लेख पढ़ा है, और जब मैं पढ़ रहा हूं तो लाभों को समझता हूं, लेकिन फ़ाइलों को * लिखने * के दौरान सबसे अच्छा उपयोग और लाभ मुझे बिल्कुल स्पष्ट नहीं है, इसलिए मैं इसे समझने में मदद मांग रहा हूं:) – Pygmy

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