मैं विंडोज 7 64 बिट के तहत बड़ी संख्या में छवि फ़ाइलों (~ 10000 x 16 एमबी) को पढ़ने/लिखने के लिए मेमोरी मैप की गई फ़ाइलों का उपयोग कर रहा हूं। मेरे लक्ष्य हैं:असीमित रूप से स्मृति मैप किए गए फ़ाइल को कैसे फ़्लश करें?
जितना संभव हो उतना डेटा कैश किया गया।
नई छवियों को आवंटित करने और जितनी जल्दी हो सके उन्हें लिखने में सक्षम होने के नाते।
इसलिए मैं फ़ाइलों तक पहुंचने के लिए मेमोरी मैप की गई फ़ाइलों का उपयोग कर रहा हूं। कैशिंग अच्छी तरह से काम करता है, लेकिन ओएस गंदे पृष्ठों को फ्लश नहीं कर रहा है जब तक कि मैं लगभग भौतिक स्मृति से बाहर नहीं हूं। शारीरिक स्मृति भरने के बाद नई फ़ाइलों को आवंटित करने और लिखने की वजह से काफी धीमी है।
एक समाधान नियमित रूप से FlushViewOfFiles()
का उपयोग करना होगा, लेकिन यह फ़ंक्शन तब तक वापस नहीं आता जब तक डेटा डिस्क पर नहीं लिखा जाता है।
क्या असीमित रूप से फ़ाइल मैपिंग को फ़्लश करने का कोई तरीका है? मुझे मिला एकमात्र समाधान Unmap()
और MapViewOfFile()
फिर से है, लेकिन इस दृष्टिकोण का उपयोग करके मैं एक ही डेटा पॉइंटर फिर से प्राप्त नहीं कर सकता। क्या कोई बेहतर दृष्टिकोण सुझा सकता है?
संपादित करें: पढ़ना WINAPI
प्रलेखन थोड़ी देर, ऐसा लगता है कि मैं अपने समस्या के लिए एक उपयुक्त समाधान पाया:
एक स्मृति सीमा उस गंदे पृष्ठों की एक फ्लशिंग में परिणाम अवरोधित नहीं है पर VirtualUnlock()
कॉलिंग।