मेरे पास एक अजीब स्मृति समस्या है, मुझे हल करने में समस्याएं आ रही हैं और कुछ और सलाह देने की सराहना करेंगे कि कहां देखना है।आईफोन मेमोरी चेतावनी और क्रैश - लेकिन कम स्मृति मेमोरी उपयोग दिखा रहे उपकरण
मेरे पास प्रोग्राम (आईफोन ऐप) में एक फ़ंक्शन है जिसके द्वारा यह मूल रूप से फ़ाइलों का भार डाउनलोड करता है, जो JSON हैं, और बाकी को डिस्क पर संग्रहीत करता है। जेएसओएन प्रसंस्करण सीपीयू गहन है और प्रति फ़ाइल कई सेकंड ले सकता है, इसलिए मेरे पास NSCperationQueue है जो maxConcurrency 1 तक सीमित है जो सभी भारी भारोत्तोलन को नियंत्रित करता है, और एक कतार जो एकाधिक फ़ाइलों को डाउनलोड करने में प्रबंधित करती है।
जब से आईओएस 5 बाहर आया, तब से ऐप को क्रैशिंग के बिना डाउनलोड अनुक्रम को पूरा करने में समस्याएं आईं और अब तक मैंने जो कोशिश की है;
1) एक एकल NSOperationQueue का उपयोग करने के लिए प्रदर्शन चयनकर्ताऑनबैकग्राउंड थ्रेड JSON प्रसंस्करण को बदल दिया ताकि बड़ी वस्तुओं के साथ काम कर रहे पृष्ठभूमि धागे की संख्या सीमित हो सके।
2) लूप के अंदर NSAutoReleasePools जोड़ा गया जो एकाधिक, बड़ी, क्षणिक वस्तुओं को बनाते हैं।
3) यह सुनिश्चित करने के लिए कि साझा कैश में फाइलें लटक नहीं रही हैं, साझा URLCache को फ़्लश किया गया है।
4) NSKeyedArchiver का उपयोग कर JSON ऑब्जेक्ट्स को डिस्क पर संग्रहीत किया और वास्तविक वस्तुओं की बजाय धागे के बीच फ़ाइल नाम पास कर दिया, फिर से उपयोग में रखे गए बनाए गए ऑब्जेक्ट्स की संख्या और आकार को कम करने का प्रयास करें।
इनमें से सभी पहली बार एक फर्क पड़ता था, और जब मैं स्मृति आवंटन को देखता था, तो अब मुझे 10 एमबी से कम समय में 20 एमबी से अधिक का उपयोग करना पड़ता है (इसलिए कोई आश्चर्य नहीं हुआ कि यह दुर्घटनाग्रस्त हो रहा था) फिर भी ऐप अभी भी कम स्मृति के साथ दुर्घटनाग्रस्त हो रहा है।
मैं यह पता लगाने की कोशिश कर रहा हूं कि ऐप को दुर्घटनाग्रस्त होने के कारण स्मृति क्या खा रहा है और इस अवसर पर मुझे कुछ भी उपयोगी बताने के लिए इंस्ट्रूमेंट्स को राजी करने में वास्तविक समस्याएं हैं।
यहाँ एक ठेठ निशान
आप कुछ ही समय बाद देख सकते हैं कि व्यस्त उपयोग 7MB से अधिक एक बालक था और अभी तक (एक iPhone 3GS चल आईओएस 4.3.5 पर) है, तो आप देख सकते हैं 2 कम स्मृति से संबंधित झंडे, और फिर कम स्मृति तत्काल, उसके बाद शीघ्र ही समाप्त होने वाले ऐप के बाद।
यदि मैं मेमोरी मॉनिटर का उपयोग करता हूं, तो दुर्घटना का कारण पर्याप्त स्पष्ट लगता है - भौतिक स्मृति समाप्त हो रही है - नीचे हल्के हरे रंग का निशान देखें। कम स्मृति चेतावनियां भौतिक स्मृति चलने के साथ-साथ आश्चर्यजनक रूप से (आश्चर्य की बात नहीं)।
कोई FWIW या तो दिखा लीक कर रहे हैं (मेरे द्वारा की गई है कि अन्य रन में)।
यह छवि कैश या NSURLConnection कैश नहीं है और केवल एक चीज है जिसके बारे में मैं सोच सकता हूं कि शायद कुछ बुरे रिसाव हैं जिन्हें पता नहीं चल रहा है ... लेकिन मुझे उनको पहचानने में समस्याएं हैं क्योंकि अगर मैं सभी में क्लिक करता हूं ऑब्जेक्ट्स जो लाइव हैं, उन्हें देखने के लिए आवंटन करें, और फिर कमांड-ए को सभी का चयन करने के लिए करें (उन्हें स्प्रेडशीट में पेस्ट करने के लिए यह देखने के लिए कि स्मृति कहां दिखती है), बिंदु पर मैंने उन्हें कॉपी करने के लिए कमांड-सी मारा , उपकरण beachballs और कभी ठीक नहीं होता है।
मैं वास्तव में यह नहीं समझ सकता कि क्या हो रहा है।क्या किसी को इस स्मृति का उपयोग करने के बारे में कुछ और उपयोगी जानकारी दिखाने के लिए उपकरणों को मनाने के तरीके पर कुछ सलाह है?
क्षमा करें मैं कोई सार्थक कोड टुकड़े पोस्ट नहीं कर सकता ... उम्मीद है कि उपकरण स्क्रीनशॉट कम से कम आपको यह बताएंगे कि मैं कहां से आ रहा हूं।
आपने कहा कि आपकी परेशानियां आईओएस 5 के साथ शुरू हुईं, फिर भी आपका निशान 4.3 पर है? (और इसमें परेशानी है!) –
हां, इस मुद्दे को पहली बार आईओएस 5 के साथ खोजा गया था, और सबसे पहले यह आईओएस 5 उपकरणों तक सीमित था, लेकिन वर्तमान में परीक्षण के दौरान यह अन्य प्रणालियों पर असफल रहा प्रतीत होता है। मुझे लगता है कि हम इसे और अधिक बारीकी से देख रहे हैं इसलिए आईओएस संस्करण प्रासंगिक हो सकता है, या प्रासंगिक नहीं हो सकता है। – Roger