मैं डेस्कटॉप सिस्टम के लिए लक्षित एक एप्लिकेशन विकसित कर रहा हूं जिसमें 256 एमबी रैम (विंडोज 2000 और ऊपर) के रूप में कम हो सकता है। मेरे आवेदन में मेरे पास यह बड़ी फ़ाइल है (> 256 एमबी) जिसमें लगभग 160 बाइट/प्रत्येक के निश्चित रिकॉर्ड हैं। इस एप्लिकेशन की एक लंबी प्रक्रिया है जिसमें समय के साथ, यह यादृच्छिक रूप से फ़ाइल का लगभग 9 0% (पढ़ने और लिखने के लिए) तक पहुंच जाएगा। किसी भी रिकॉर्ड रिकॉर्ड को उस विशेष रिकॉर्ड के पढ़ने से 1,000 से अधिक रिकॉर्ड एक्सेस नहीं होंगे (मैं इस मान को ट्यून कर सकता हूं)।CreateFileMapping, MapViewOfFile, सिस्टम मेमोरी को पकड़ने से कैसे बचें
मेरे पास इस प्रक्रिया के लिए दो स्पष्ट विकल्प हैं: नियमित I/O (FileRead, FileWrite) और मेमोरी मैपिंग (CreateFileMapping, MapViewOfFile)। उत्तरार्द्ध पर्याप्त स्मृति वाले सिस्टम में अधिक कुशल होना चाहिए, लेकिन कम स्मृति वाले सिस्टम में यह अन्य अनुप्रयोगों की स्मृति को स्वैप कर देगा, जो मेरे आवेदन में नो-नो है। क्या प्रक्रिया को सभी मेमोरी खाने से रोकने का कोई तरीका है (उदाहरण के लिए, मेमोरी पेजों की फ्लशिंग को मजबूर करना जैसे मैं अब तक नहीं पहुंच रहा हूं)? यदि यह संभव नहीं है, तो मुझे नियमित I/O पर वापस जाना चाहिए; मुझे लेखन भाग के लिए ओवरलैप I/O का उपयोग करना पसंद होता था (क्योंकि पहुंच इतनी यादृच्छिक है), लेकिन प्रलेखन writes of less than 64K are always served synchronously कहता है।
I/O में सुधार के लिए कोई भी विचार स्वागत है।
से ProcessExplorer का उपयोग करें शायद वर्चुअलफ्री (MEM_DECOMMIT) मदद की जा सकती है? मैं इसके साथ परिचित नहीं हूँ। –
नहीं, वर्चुअलफ्री (MEM_DECOMMIT) एमएमएफ के लिए विफल रहता है; मैंने अभी जाँच की। –