2011-08-04 9 views
5

मैं इस जगह में एक नौसिखिया हूं और सी # मोबाइल के साथ स्टार्टर हूं। अब, मैं सी # हैंडहेल्ड डिवाइस प्लेटफ़ॉर्म पर काम कर रहा हूं। इसलिए, मेरे पास कुछ सवाल है कि स्मृति उपयोग कैसे प्राप्त करें। मैंने GC.GetTotalMemory() को आजमाया है और जीसी का उपयोग आवंटित स्मृति प्राप्त करें। लेकिन, क्या मैं यह अनुमान लगाने के लिए उपयोग कर सकता हूं कि मेरे एप्लिकेशन को स्मृति आवंटित किया गया था। मुझे लगता है कि यह वास्तविक हो सकता है लेकिन वास्तविक नहीं है। फिर मैंने विंडोज सीई पर मेमोरी की जांच के लिए किसी संदर्भ या कक्षा या किसी भी चीज़ का उपयोग करने के लिए Google की कोशिश की है, लेकिन मुझे केवल एक और प्लेटफॉर्म में मिला है जो मैं जो काम कर रहा हूं उसके साथ समर्थित नहीं है।सी # विंडोज सीई .नेट 3.5 मेमोरी उपयोग की जांच करने के लिए

अग्रिम धन्यवाद, Stoper


है कि मैं इस पद से दूर चला गया लिए खेद है।

मैं वास्तव में किसी ऐसे व्यक्ति का धन्यवाद करता हूं जिसने मेरे प्रश्न का उत्तर दिया है और इस पोस्ट पर देखा है।

अब, मुझे अपने प्रोजेक्ट में "ओपननेट सीएफ" संदर्भ लागू करने की ज़रूरत है।

एक बार फिर धन्यवाद;)

उत्तर

6

डॉक्स के अनुसार, GC.GetTotalMemory रिटर्न

अनेक बाइट्स वर्तमान में कामयाब स्मृति में आवंटित की संख्या का सबसे अच्छा उपलब्ध अनुमान होता है कि।

यह कुछ देवताओं, विशेष रूप से देशी दुनिया से आने वाले लोगों के लिए थोड़ा भ्रामक/भ्रमित है। यह आपको बताने जा रहा है कि जीसी ने को आंतरिक रूप से आवंटित किया है, लेकिन पूरे ढेर के लिए वास्तविक आवंटन (यानी आवंटित नहीं किया गया है और सिस्टम से प्रबंधित स्मृति) को आवंटित नहीं किया गया है।

यह देशी आवंटन की रिपोर्ट भी नहीं करता है। यदि आप बहुत सी जीडीआई ऑब्जेक्ट्स (बिटमैप्स, ब्रश इत्यादि) का उपयोग करते हैं तो यह बहुत बड़ा हो सकता है क्योंकि उनके पास मूल मेमोरी आवंटन भी है। बिटमैप के तेह मामले में, यह प्रबंधित पदचिह्न वास्तव में अपने मूल पदचिह्न से बहुत छोटा है।

आप अपने प्रबंधित क्षुधा समग्र सिस्टम संसाधनों पर वास्तविक प्रभाव में रुचि रखते हैं, तो आप ओएस क्वेरी और पूछना यह क्या हो रहा है के लिए एक वास्तविक महसूस करने के लिए है कितना शारीरिक और आभासी स्मृति (मैं करने की जरूरत है तथ्य में अपेक्षाकृत बेकार होने के लिए जीसी.गेटटॉटल मेमरी खोजें)। पी/Invoking GlobalMemoryStatus आपको जो चाहिए वह देता है। एमएसडीएन में an example है।

+0

एफवाईआई मुझे अपने विंडोज सीई 6 डिवाइस पर गलत 'ग्लोबलमेमरीस्टैटस' मिला। उपलब्ध आभासी, उपलब्ध भौतिक, और मेमोरी लोड मान चारों ओर कूदेंगे क्योंकि मैंने स्मृति में और अधिक छवियों को लोड करना जारी रखा है। कभी-कभी छवि लोड होने से पहले मान अधिक होंगे, कभी-कभी कम, भले ही मैं छवियों को लोड कर रहा था (सभी छवियों को लोड रखा गया था)। – Trisped

+0

मुझे संदेह है कि यह गलत है - मैंने कभी ऐसा मंच नहीं देखा है जहां यह था। शायद यह है कि आप बस समझ में नहीं आता कि इसका क्या अर्थ है। जीसी में इसका अपना ढेर होता है, जो बढ़ सकता है या सिकुड़ सकता है।इसे बढ़ाने या घटाने के लिए * ओएस से * आवंटित या मुक्त मेमोरी हो सकती है। वे आवंटन भौतिक या वर्चुअल से प्राप्त हो सकते हैं कि वे विशेष रूप से पृष्ठ बनाते हैं, या यदि वे पूरी तरह आरक्षित हैं। मेमोरी आवंटन बहुत आसान नहीं है, और जीसी इसके शीर्ष पर जटिलता की एक और परत जोड़ रहा है। – ctacke

+0

यदि आप चाहते हैं कि मैं आपको आउटपुट का डंप प्राप्त कर सकूं। मुझे यकीन नहीं है कि ओएस में कुछ खास है, लेकिन मेरे पास एक लूप है जो छवियों को लोड करता है। यादृच्छिक रूप से, कुल उपलब्ध भौतिक और आभासी स्मृति कूद जाएगा। यह तब तक असंभव होना चाहिए जब तक चीजों को स्मृति से बाहर नहीं किया जा रहा हो। – Trisped

3

इसे आजमाएं। जीसी.गेटटॉटलमेमरी() के साथ आपके पास जो कुछ भी था, वह आपको वह देगा जो आपको लगता है। आपको टेक्स्ट लेबल्स को अपने आप से बदलना होगा या किसी भी तरह से इसका इस्तेमाल करना होगा। आपको पी/इनवॉक का उपयोग करना होगा हालांकि ...

public struct MEMORYSTATUS 
{ 
    public UInt32 dwLength; 
    public UInt32 dwMemoryLoad; 
    public UInt32 dwTotalPhys; 
    public UInt32 dwAvailPhys; 
    public UInt32 dwTotalPageFile; 
    public UInt32 dwAvailPageFile; 
    public UInt32 dwTotalVirtual; 
    public UInt32 dwAvailVirtual; 
} 

[DllImport("coredll.dll")] 
private static extern void GlobalMemoryStatus(out MEMORYSTATUS lpBuffer); 

public static void GetGlobalMemoryStatus(out UInt32 dwTotal, out UInt32 dwAvail, 
              out UInt32 dwProcTotal, out UInt32 dwProcAvail) 
{ 
    MEMORYSTATUS status = new MEMORYSTATUS(); 
    output.Length = (UInt32)System.Runtime.InteropServices.Marshal.SizeOf(output); 
    GlobalMemoryStatus(out status); 

    dwTotal = status.dwTotalPhys; 
    dwAvail = status.dwAvailPhys; 
    dwProcTotal = status.dwTotalVirtual; 
    dwProcAvail = status.dwAvailVirtual; 
} 

private void UpdateMemoryDisplay() 
{ 
    /*************************************************************************/ 
    bool IsTotalGB = false; 
    bool IsUsedGB = false; 
    uint TotalRamMemory; 
    uint AvailRamMemory; 
    uint ProcTotalRamMemory; 
    uint ProcAvailRamMemory; 

    GetGlobalMemoryStatus(out TotalRamMemory, out AvailRamMemory, 
          out ProcTotalRamMemory, out ProcAvailRamMemory); 

    float TotalMB = (float)((float)TotalRamMemory/(1024 * 1024)); 
    float UsedMB = TotalMB - (float)((float)AvailRamMemory/(1024 * 1024)); 

    int RamPercent = (int)((UsedMB/TotalMB) * 100.0); 

    if (1000 < TotalMB) 
    { 
     TotalMB /= 1000; 
     IsTotalGB = true; 
    } 

    if (1000 < UsedMB) 
    { 
     UsedMB /= 1000; 
     IsUsedGB = true; 
    } 

    this.RamMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); 
    this.RamMemMaxLbl.Text = TotalMB.ToString("0.0") + ((false != IsTotalGB) ? "GB" : "MB"); 
    this.RamMemPercent.Current = RamPercent; 

    IsUsedGB = false; 

    TotalMB = (float)((float)ProcTotalRamMemory/(1024 * 1024)); 
    UsedMB = TotalMB - (float)((float)ProcAvailRamMemory/(1024 * 1024)); 

    if (1000 < UsedMB) 
    { 
     UsedMB /= 1000; 
     IsUsedGB = true; 
    } 

    this.ProcRamMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); 

    IsUsedGB = false; 

    UsedMB = (float)((float)GC.GetTotalMemory(false)/(1024 * 1024)); 

    if (1000 < UsedMB) 
    { 
     UsedMB /= 1000; 
     IsUsedGB = true; 
    } 

    this.GCMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); 
    /*************************************************************************/ 
} 
+0

आप सभी के लिए धन्यवाद। अब, मुझे "ओपनएनईटीसीएफ" संदर्भ मिला है। यह सब मैं चाहता हूँ। लेकिन मुझे अभी भी एप्लिकेशन मेमोरी उपयोग कैसे प्राप्त करना है, इसके बारे में पता चल रहा है। –

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