5

मैं 32 बिट एंड उपयोगकर्ता एप्लिकेशन पर काम करता हूं जिसके लिए बहुत सारी मेमोरी की आवश्यकता होती है। कई गीगाबाइट तक। मैंने हाल ही में this Raymond Chen article. से प्रेरित स्मृति-मैप-फाइलों के बिना हमारी आंतरिक मेमोरी आवंटन रणनीति को स्विच किया है यह बहुत अच्छा काम करता है।मेमोरी मैप की गई फ़ाइलें: स्मृति उपयोग की निगरानी कैसे करें

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

+0

यह प्रक्रिया के तहत दिखाना चाहिए -> पृष्ठ फ़ाइल बाइट्स – John

उत्तर

0

समाधान sysinternals' VMMap के साथ मेरे एप्लिकेशन की निगरानी करना था। यह आवंटन प्रकार द्वारा अनुप्रयोग मेमोरी उपयोग को तोड़ देता है (मेरी मेमोरी मैप की गई फ़ाइलों को "साझा" कहा जाता है), साथ ही स्थिति (स्मृति या स्वैप आउट में) द्वारा।

यहां तक ​​कि एक ग्राफिकल मेमोरी विखंडन मानचित्र भी है!

0

QueryWorkingSet पर कॉल करें और अपने मैप किए गए रेंज के भीतर मौजूद पृष्ठों की संख्या को गिनें ताकि यह निर्धारित किया जा सके कि आपकी मेमोरी कितनी कामकाजी सेट का हिस्सा है। लेकिन ध्यान रखें कि पृष्ठों को कामकाजी सेट से बाहर रखा जा सकता है लेकिन फिर भी भौतिक स्मृति में कहीं भी हो सकता है।

+0

दिलचस्प! एक स्नैग हो सकता है: विंडोज़ मेरे कामकाजी सेट से पृष्ठों को हटा सकता था जब मैं उन्हें थोड़ी देर तक नहीं पहुंचता था। मुझे लगता है कि खिड़कियां उन्हें भौतिक स्मृति में तब तक रखेगी जब तक कि किसी और को स्मृति की आवश्यकता न हो। –

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