10

मैं हाल ही में एक ऐप विकसित कर रहा हूं जो बड़ी मात्रा में डेटा को बहुत बार संसाधित करता है (~ 15 बार एक मिनट)। ऐसा करने के लिए, मैंने स्मृति का एक बड़ा हिस्सा आवंटित किया, फिर डेटा के प्रत्येक बैच के लिए इसे मुक्त कर दिया।ऐप के लिए स्पाकी मेमोरी "स्वस्थ" है?

यहाँ उपकरण से मेरी स्मृति आवंटन का एक स्क्रीन है: The memory

मेमोरी उपयोग को बहुत शीघ्र 30MB के बारे में करने के लिए 3MB के बारे में से झूल रहे हैं। मैं बस सोच रहा था, आईफोन के लिए यह "स्वस्थ" है।

क्या इतनी जल्दी मेमोरी आवंटित और मुक्त करने के लिए जोखिम भरा है? क्या यह अस्थिर है, या सिर्फ बुरी आदत है?

धन्यवाद!

+0

ब्याज से, किस तरह की प्रसंस्करण स्पाइक पैदा कर रही है? क्या यह छवि प्रसंस्करण है? –

+0

हां, वास्तव में छवि विश्लेषण, आप कैसे जानते थे? – pop850

उत्तर

7

यह न तो जोखिम भरा और न ही आवश्यक बुरा अभ्यास है। स्मृति आवंटित करने और मुक्त करने में समय लगता है, इसलिए इसे बार-बार करना और आवंटित स्मृति का पुन: उपयोग करना स्मृति उपयोग क्षमता (प्रत्येक पल में सबसे कम स्मृति का उपयोग करके) और प्रदर्शन के बीच एक व्यापार-बंद है।

यदि आपके ऐप का प्रदर्शन इस समय पीड़ित नहीं है, तो संभवतः आपने अपने ऐप के लिए इस ट्रेडऑफ़ के बारे में सही विकल्प चुना है।

आम तौर पर, 30 एमबी मेमोरी का उपयोग करके पुराने उपकरणों (आईफोन 3 जी और पुराने) के लिए काफी बड़ी राशि है। आप यह सुनिश्चित नहीं कर सकते कि आपके ऐप में इतनी मेमोरी उपलब्ध है इसलिए स्मृति चेतावनियां प्राप्त करने के लिए तैयार रहें। यदि आपका ऐप मेमोरी चेतावनी प्राप्त करते समय इसका मेमोरी उपयोग कम नहीं कर सकता है, तो ओएस इसे मार सकता है।

+0

मेरे अनुभव में, 20-25 एमबी से अधिक कुछ भी एक आईफोन 3 जी पर ऐप को मारने का कारण बन जाएगा। pop850, आपको पुराने उपकरणों पर इसका परीक्षण करना चाहिए (यदि आप उन्हें समर्थन देने में रुचि रखते हैं)। ऐसा कहा जा रहा है कि, यदि आपका ऐप पहले स्पाइक के साथ नहीं मारा जाता है, तो बार-बार ऐसा करने से शायद इसे मार नहीं पाएगा। जब तक कोई रिसाव नहीं है। –

+0

मुझे लगता है मैं तो मैं कम स्मृति का उपयोग करें, क्योंकि मैं नए उपकरणों के लिए अपने दर्शकों को सीमित नहीं करना चाहती मात्रा में प्रसंस्करण करना होगा। हालांकि, ऐसा लगता है कि मेरे आईफोन 4 पर दुर्घटनाग्रस्त होने से पहले मैंने 180 एमबी से अधिक आवंटित किए हैं। जवाब के लिए बहुत धन्यवाद। – pop850

-1

यह निर्भर करता है कि यदि उपयोगकर्ता के पास आईफोन 4 या आईफोन 3 जीएस है तो यह सक्षम होना चाहिए लेकिन आईफोन 3 जी पर इसके परिणामस्वरूप स्मृति चेतावनी बहुत जल्दी हो जाएगी। आईफोन 4 में ऐप्स के लिए 256 एमबी रैम है (कुल में 512 एमबी) आईफोन 3 जीएस में ऐप्स के लिए 128 एमबी है, और कुल में 256 आईफोन 3 जी में केवल 128 एमबी और 64 एमबी ऐप्स हैं .. आमतौर पर लगभग 40 एमबी फ्री होते हैं ऐप्स चल रहे हैं।

सेब कहते हैं आप केवल स्मृति तुम सच में की जरूरत आवंटित करना चाहिए, और बहुत ज्यादा autorelease का उपयोग नहीं करने का प्रयास करें, क्योंकि autorelease हम करते हैं जबकि हमें एक वस्तु देता आवंटित नहीं किया जा रहा वास्तव में इसे अब जरूरत है

हैं प्रदर्शन बहुत खराब नहीं है, मैं कम स्मृति का उपयोग करने की कोशिश करता हूं और आपको वास्तव में इसकी आवश्यकता होने पर आवंटित करना होगा।

+0

आपको वास्तव में autorelease वस्तुओं के साथ autorelease पूल का उपयोग करना चाहिए और जब भी आवश्यक हो उनका उपयोग करें। – koo

+0

@Adam Ko लेकिन फिर आपको रिलीज का उपयोग करना चाहिए, ज्यादातर मामलों में आप स्वयं को गिनती बरकरार रख सकते हैं और आपको स्वयं को पूल बनाने की आवश्यकता नहीं होगी। जब तक आप एक लूप में कुछ नहीं कर रहे हैं जो बहुत से ऑटोरेलेज्ड ऑब्जेक्ट्स का उपयोग करता है तो आप एपीआई –

+0

हाँ के माध्यम से प्राप्त करते हैं, सुनिश्चित नहीं है कि आपका क्या मतलब है। प्रश्न में वर्णित व्यवहार स्मृति स्मृति चेतावनी का कारण नहीं बनता है, जब तक कि आप बड़ी मात्रा में स्मृति आवंटित नहीं कर लेते।साथ ही, आप कितनी मेमोरी उपलब्ध हैं, इस पर कुछ बहुत बड़े सामान्यीकरण कर रहे हैं, यह कहना गलत है कि 'आईफोन 4 में ऐप्स के लिए 256 एमबी है (कुल में 512 एमबी)। ऐसा नहीं है कि यह हार्डवेयर पर कैसे काम करता है। – lxt

4

इन परिस्थितियों में मेरी प्राथमिक चिंता विखंडन होगी। यदि भाग सभी समान आकार हैं, तो आपको ठीक होना चाहिए (और अपने ग्राफ को देखकर, चोटियों को पूरी तरह से स्तर दिखाई देता है, इसलिए मुझे लगता है कि यह मामला है)।

आप आवंटन लागत का भुगतान करेंगे, लेकिन ओले कहते हैं, यदि आपका ऐप पहले से ही काफी अच्छा प्रदर्शन कर रहा है, तो इसे अनुकूलित करने की कोशिश में बहुत कुछ नहीं है।

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