2015-04-01 9 views
13

ठीक है इसलिए मैं मशीन पर चल रही एक विशिष्ट प्रक्रिया के बारे में डेटा एकत्रित करने के लिए WMI (.net/C#) का उपयोग कर रहा हूं। मुझे Win32_PerfFormattedData_PerfProc_Process कक्षा के माध्यम से डेटा मिलता है। यही कारण है कि वर्ग गुण का एक बहुत है, लेकिन उन है कि हम में रुचि रखते हैं इस प्रकार हैं:कार्य प्रबंधक के रूप में स्मृति उपयोग की गणना कैसे करें?

uint64 PageFileBytes; 

मूल्य, बाइट में, कि इस प्रक्रिया पेजिंग फ़ाइल (रों) में इस्तेमाल किया गया है। पेजिंग फाइलें उन प्रक्रियाओं द्वारा उपयोग की जाने वाली मेमोरी के पेज स्टोर करती हैं जो अन्य फाइलों में निहित नहीं हैं। पेजिंग फाइलें सभी प्रक्रियाओं द्वारा साझा की जाती हैं और पेजिंग फाइलों में स्थान की कमी अन्य प्रक्रियाओं को स्मृति आवंटित करने से रोक सकती है।

uint32 PoolNonpagedBytes; 

मूल्य, बाइट में, गैर-पृष्ठांकित पूल में, वस्तुओं है कि डिस्क पर लिखी नहीं किया जा सकता के लिए सिस्टम स्मृति (भौतिक ऑपरेटिंग सिस्टम द्वारा प्रयुक्त स्मृति) के एक क्षेत्र है, लेकिन भौतिक स्मृति में जब तक रहना चाहिए के रूप में वे आवंटित किया जाता है। Win32_PerfFormattedData_PerfOS_Memory में PoolNonpagedBytes को Win32_PerfFormattedData_PerfProc_Process में PoolPagedBytes प्रॉपर्टी की तुलना में अलग-अलग गणना की जाती है, इसलिए यह Win32_PerfFormattedData_PerfProc_Process के सभी उदाहरणों के लिए पूलपेडबेट्स के कुल के बराबर नहीं हो सकता है। यह संपत्ति केवल अंतिम मनाया गया मूल्य प्रदर्शित करती है; यह औसत नहीं है।

uint32 PoolPagedBytes; 

मूल्य, बाइट में, पृष्ठांकित पूल में, जब वे उपयोग किया जाता है सिस्टम स्मृति वस्तुओं है कि डिस्क के लिए लिखा जा सकता है के लिए (भौतिक ऑपरेटिंग सिस्टम द्वारा प्रयुक्त स्मृति) के एक क्षेत्र नहीं किया जा रहा। Win32_PerfFormattedData_PerfOS_Memory में PoolNonpagedBytes प्रॉपर्टी Win32_PerfFormattedData_PerfProc_Process में PoolPagedBytes प्रॉपर्टी की तुलना में अलग-अलग गणना की जाती है, इसलिए यह Win32_PerfFormattedData_PerfProc_Process के सभी उदाहरणों के लिए पूलपेडबेट्स के कुल के बराबर नहीं हो सकता है। यह संपत्ति केवल अंतिम मनाया गया मूल्य प्रदर्शित करती है; यह औसत नहीं है।

uint64 PrivateBytes; 

वर्तमान मूल्य, बाइट में, कि इस प्रक्रिया आवंटित किया है अन्य प्रक्रियाओं के साथ साझा किया नहीं कर सकते।

uint64 VirtualBytes; 

वर्तमान आकार, बाइट्स में, वर्चुअल एड्रेस स्पेस का उपयोग कर रहा है जो प्रक्रिया का उपयोग कर रहा है। वर्चुअल एड्रेस स्पेस का उपयोग आवश्यक रूप से डिस्क या मुख्य मेमोरी पृष्ठों के समान उपयोग को इंगित नहीं करता है। वर्चुअल स्पेस सीमित है और, बहुत अधिक उपयोग करके, प्रक्रिया पुस्तकालयों को लोड करने की अपनी क्षमता को सीमित कर सकती है।

uint64 WorkingSet; 

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

मैं वर्तमान में मेमोरी उपयोग की रिपोर्ट करने के लिए WorkingSet फ़ील्ड का उपयोग कर रहा हूं। हालांकि यह टास्क मैनेजर क्या दिखा रहा है के साथ संरेखित नहीं करता है। मैंने PrivateBytes के साथ प्रयास किया लेकिन यह भी "सही" नहीं है। ऐप मॉनीटर की प्रक्रिया एक .NET प्रक्रिया है (यदि यह बिल्कुल मायने रखती है) और यह ऐप द्वारा कम से कम 100 एमबी अधिक मेमोरी का उपयोग करने के लिए रिपोर्ट किया जाता है, जो कार्य प्रबंधक एक ही समय में दिखा रहा है।

तो सवाल यह है कि कार्य प्रबंधक द्वारा दिखाए गए अनुसार 'मेमोरी उपयोग की प्रक्रिया के सर्वोत्तम अनुमान की गणना करने के लिए "फॉर्मूला" क्या है?

enter image description here

उत्तर

3

Win32_PerfFormattedData_PerfProc_Process सही वर्ग है। यह संपत्ति WorkingSetPrivate से खींचती है। कोई सूत्र/गणना की आवश्यकता नहीं है।

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