2011-12-02 17 views
6

के लिए उपकरणों का उपयोग करने में अस्पष्टताएं मैं उपकरण के साथ एक आवेदन प्रोफाइल कर रहा हूं। जब मैं रूपरेखा आईओएस विकास

  • लीक का चयन करके जब मैं रूपरेखा के लिए ऐप को चलाने के लिए ऐप चलाने

    1. सीधे आवंटन का चयन करके: रूपरेखा को दो तरह से आवंटन उपकरण का उपयोग किया जाता है।

    दोनों मामलों में, मेरे पास आवंटन उपकरण परीक्षण के लिए सक्षम था। लेकिन आश्चर्य की बात है कि, इन उदाहरणों पर आवंटन के लिए मेरे पास दो अलग-अलग प्रकार के आउट थे।

    क्या वे अलग-अलग व्यवहार करना चाहते हैं? या यह उपकरण के साथ एक समस्या है।

    बार मैं लीक उपकरण के साथ प्रोफाइल:

    आवंटन ग्राफ में: enter image description here 1. मैं ग्राफ़ में Peaks के बहुत मिलता है, लाइव बाइट्स और समग्र बाइट्स एक ही हैं। 2. मुझे 1 मिनट के उपयोग के बाद काले झंडे मिलते हैं (मुझे लगता है कि यह स्मृति चेतावनी के बारे में अलार्म)। फिर झंडे के एक सेट के बाद, मेरे ऐप क्रैश। (यह कई बार होता है, तब भी जब सीधे डिवाइस पर ऐप्लिकेशन चलाने)

    बार मैं आबंटन उपकरण के साथ प्रोफाइल:

    आवंटन ग्राफ में: enter image description here 1. मैं चोटियों अक्सर नहीं मिलता है के रूप में यह था उपरोक्त मामले में। लाइव बाइट्स हमेशा कुल बाइट्स से कम रास्ता था। 2. मैंने 20 मिनट से अधिक समय तक उपयोग किया है और कभी भी ब्लैक फ्लैग नहीं मिला है।

    एक तथ्य मुझे पता चला कि, जब लाइव बाइट्स और समग्र बाइट बराबर हैं, तो NSZombieEnabled सक्षम किया जा सकता है।

    क्या आप में से किसी ने भी इस समस्या का सामना किया है।

    अद्यतन 1:

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

    और जब मैंने आवेदन के चरणबद्ध उपयोग के समान कदम की कोशिश की तो मेरा आवेदन क्रैश नहीं हुआ और कोई झंडे नहीं मिला।

    यह विसंगति क्यों?

  • उत्तर

    9

    पहले मामले में, आप केवल लाइव आवंटन को ट्रैक कर रहे हैं क्योंकि "लीक" टेम्पलेट आवंटन उपकरण को इस तरह से कॉन्फ़िगर करता है। दूसरे में, आप लाइव और आवंटित आवंटन दोनों को ट्रैक कर रहे हैं। (कोकोफू ने कहा)।

    दोनों उपयोगी हैं, लेकिन कुछ अलग कारणों से।

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

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

    उदाहरण के लिए, आपका ग्राफ दिखाता है कि उस अवधि के दौरान 14 बाइट आवंटन - 9218 आवंटन के 1.27 एमबी हैं। सभी स्वतंत्र हैं() डी [अच्छा!], लेकिन यह अभी भी आवंटित करने के लिए काम का एक गुच्छा दर्शाता है, डेटा (संभवतः) भरें, और उनमें से प्रत्येक को मुक्त करें। यह एक समस्या हो सकती है, शायद नहीं।

    (इसे परिप्रेक्ष्य में रखने के लिए, मैंने इस तकनीक का उपयोग किसी एप्लिकेशन को अनुकूलित करने के लिए किया था। केवल # क्षणिक - अल्पकालिक - आवंटन को कम करने पर ध्यान केंद्रित करके, मैं एप्लिकेशन के प्राथमिक एल्गोरिदम को 5x तेज करने में सक्षम था और 85% द्वारा स्मृति उपयोग को कम। पता चला है एप्लिकेशन तार को कॉपी किया गया था कई, कई, कई बार।)


    सुनिश्चित नहीं हैं कि क्यों अपने अनुप्रयोग के रूप में आप वर्णित दुर्घटनाग्रस्त हो गया। चूंकि यह एक स्मृति चेतावनी है, इसलिए आपको देखना चाहिए कि अक्सर आवंटित किया जाता है।

    ध्यान रखें कि यदि आपके पास ज़ोंबी पहचान सक्षम है, तो इसमें बहुत अधिक अतिरिक्त मेमोरी होती है।

    +0

    बीबीएम: धन्यवाद। मैंने सवाल अपडेट किया है। क्या आप मेरे संदेह को स्पष्ट कर सकते हैं? – Krishnan

    2

    आवंटन तत्काल होने के तरीके के आधार पर अलग-अलग विकल्प हैं। आवंटन टाइल में "i" प्रतीक पर क्लिक करके विकल्पों की जांच करें।

    हां, मुझे यह कष्टप्रद भी लगता है।

    +0

    कौन सा सही चुनना है? किस तरह से उनमें से प्रत्येक अलग हैं? – Krishnan

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