2012-03-12 12 views
25

मैं निश्चित रूप से इस बिंदु पर उलझन में हूं।आईओएस मेमोरी पदचिह्न के लिए सही आंकड़ा क्या है। लाइव बाइट्स? असली मेमोरी? अन्य?

मेरे पास एक आईपैड एप्लिकेशन है जो ऑब्जेक्ट आवंटन उपकरण में 6-12 एमबी के 'लाइव बाइट्स' उपयोग को दिखाता है। अगर मैं मेमोरी मॉनिटर या गतिविधि मॉनिटर खींचता हूं, तो कुछ गंभीर उपयोग के बाद 'रियल मेमोरी' कॉलम लगातार 80-90 एमबी तक चढ़ता है।

तो क्या मेरे पास सामान्य स्मृति पदचिह्न या उच्चतर है?

This answer और this answer दावा है कि आपको 'लाइव बाइट्स' देखना चाहिए क्योंकि 'रीयल मेमोरी' कॉलम जारी किए गए मेमोरी ब्लॉक दिखाता है, लेकिन ओएस ने अभी तक इसे पुनः दावा नहीं किया है।

दूसरी तरफ, this answer का दावा है कि आपको उस मेमोरी मॉनिटर पर ध्यान देना होगा, क्योंकि 'लाइव बाइट्स' में इंटरफेस तत्वों जैसी चीजें शामिल नहीं हैं।

आईओएस मेमोरी पदचिह्न के साथ सौदा क्या है ?? :)

उत्तर

13

स्मृति उपयोग को मापने के लिए वे केवल दो अलग-अलग मीट्रिक हैं। कौन सा "सही" है, इस पर निर्भर करता है कि आप किस प्रश्न का उत्तर देने का प्रयास कर रहे हैं।

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

  • कोड स्मृति जो आपके ऐप को आवंटित किया गया है।

  • मेमोरी पूल: अधिकांश आवंटक स्मृति के एक या अधिक पूल बनाए रखकर काम करते हैं जिससे वे व्यक्तिगत वस्तुओं या आवंटित स्मृति ब्लॉक के लिए टुकड़े बना सकते हैं। malloc के अधिकांश कार्यान्वयन इस तरह से काम करते हैं, और मुझे उम्मीद है कि ऑब्जेक्ट आवंटक भी करता है। जब ऑब्जेक्ट को हटाया जाता है तो इन पूलों को स्वचालित रूप से नीचे नहीं बदला जाता है - स्मृति को पूल में 'फ्री' चिह्नित किया जाता है, लेकिन पूरे पूल को अभी भी आपके ऐप के लिए जिम्मेदार ठहराया जाएगा।

अन्य तरीकों से आपके कोड द्वारा सीधे आवंटित किए बिना स्मृति को आपके ऐप के लिए जिम्मेदार ठहराया जा सकता है।

तो, आप अपने आवेदन के बारे में क्या जानने की कोशिश कर रहे हैं? यदि आप यह समझने की कोशिश कर रहे हैं कि कम ऐप के कारण आपका ऐप क्रैश क्यों हुआ, तो "लाइव बाइट्स" दोनों देखें (यह देखने के लिए कि आपका ऐप अब क्या उपयोग कर रहा है) और "असली मेमोरी" (यह देखने के लिए कि वीएम सिस्टम कितनी मेमोरी कहता है ऐप उपयोग कर रहा है)। यदि आप अपने ऐप के मेमोरी प्रदर्शन को बेहतर बनाने की कोशिश कर रहे हैं, तो "लाइव बाइट्स" या "लाइव ऑब्जेक्ट्स" को देखने में अधिक मदद मिलती है, क्योंकि यह स्मृति है जिसके बारे में आप कुछ कर सकते हैं।

+0

ठीक है मुझे लगता है कि पहले मैं यह निर्धारित करने की कोशिश कर रहा हूं कि यह उन मीट्रिक का सटीक चित्रण भी है। मुझे विश्वास नहीं है कि यह है (बिना किसी अपराध के।) आवंटन उपकरण में 'समग्र बाइट्स' कॉलम भी है, जो समय के साथ बढ़ता जा रहा है - जो आवंटन के पूर्ण इतिहास को ट्रैक रखने के बाद से समझ में आता है। लेकिन यह 'असली मेमोरी' संख्या से जंगली रूप से भिन्न होता है। इसके अलावा 'असली मेमोरी' संख्या हमेशा के लिए बढ़ती नहीं रहती है, लेकिन 'लाइव बाइट्स' की तुलना में बहुत अधिक संख्या में बसने लगती है। सबसे पहले मैं समझ रहा हूं कि क्या है। –

+0

@BobSpryn मैं अपना उत्तर दोबारा लिखता हूं - उम्मीद है कि यह आपके और भविष्य के पाठकों के लिए अधिक उपयोगी होगा। – Caleb

+0

उचित पर्याप्त स्पष्टीकरण की तरह लगता है। विवरण के लिए धन्यवाद! –

1

'लाइव बाइट्स' का अर्थ है आपके कोड द्वारा आवंटित स्मृति (उदाहरण के लिए malloc), इसलिए आपके पास इस स्मृति तक पहुंच है। 'असली मेमोरी' आपके ऐप द्वारा उपयोग की जाने वाली मेमोरी की भौतिक मात्रा दिखाती है। इसमें ओपनजीएल बनावट भी शामिल है, (संभावित रूप से) ओपन एएल से लगता है ...

लाइव बाइट्स आपके कोड में स्मृति आवंटित और रिलीज़ करते समय जांचने के लिए उपयोगी है। स्मृति स्मृति अनुकूलन दक्षता के लिए असली स्मृति अच्छा संकेतक है।और यह ओवरहेड 'कम स्मृति' चेतावनियों का कारण बनता है।

13

यह देखते हुए कि मैंने the last answer से कैसे लिखा है, मुझे इसके साथ खड़े रहना होगा। यदि आप अपने आवेदन के लिए वर्तमान मेमोरी उपयोग की कुल, सटीक गणना चाहते हैं, तो मेमोरी मॉनीटर उपकरण का उपयोग करें।

this answer में वर्णित कारणों के लिए, आवंटन कुछ तत्वों के स्मृति आकार को छुपाता है, जिसका अर्थ है कि इसकी स्मृति उपयोग योग आपके एप्लिकेशन के मेमोरी आकार से काफी कम है। बहुत से लोग इसे कठिन तरीके से पाते हैं जब वे अपने आईओएस डिवाइस पर अपने आवेदन को कार्यान्वित करने का प्रयास करते हैं। पुराने हार्डवेयर पर, आपको ~ 30 एमबी की हार्ड मेमोरी छत थी, जहां आप पार हो गए थे कि आपका आवेदन कड़ी मेहनत कर रहा था।

कई डेवलपर्स (स्वयं शामिल) ने देखा कि हमारे पास आवंटन में केवल 1-2 एमबी लाइव बाइट्स थे और सोचा था कि हम अच्छे थे, जब तक कि हमारे अनुप्रयोगों ने स्मृति चेतावनियां और प्रारंभिक समाप्ति प्राप्त नहीं की। यदि आपने मेमोरी मॉनिटर को देखा है, तो आप इन अनुप्रयोगों के वास्तविक इन-मेमोरी आकार को> 20 एमबी के रूप में देख सकते हैं, और आप एप्लिकेशन को मेमोरी मॉनीटर में 30 एमबी बाधा पार करने के तुरंत बाद देख सकते हैं।

इसलिए, यदि आप अपने कुल एप्लिकेशन मेमोरी उपयोग का सटीक मूल्यांकन चाहते हैं, तो मेमोरी मॉनीटर का उपयोग करें। स्मृति में मौजूद विशिष्ट वस्तुओं को खोजने के लिए आवंटन बहुत अच्छा है, खासकर जब आप ढेर शॉट्स का उपयोग उन चीज़ों को ढूंढने के लिए करते हैं जो जमा हो सकते हैं (जैसे लीक, चक्र बनाए रखना, या अन्य कारणों से)। स्मृति में अपने एप्लिकेशन के वास्तविक आकार को निर्धारित करते समय बस उस पर भरोसा न करें।

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