2017-08-10 6 views
9

मैं एक असंबद्ध उपभोक्ता के साथ एक निर्माता-उपभोक्ता समस्या पर काम कर रहा हूं। प्रोड्यूसर प्रोसेसिंग कतार में जितना चाहें उतने कार्यों को डाल सकता है। जब कतार खाली होती है तो उपभोक्ता थ्रेड को अवरुद्ध कर देगा।लिनक्स पर जीसीडी मेमोरी ब्लोट स्विफ्ट

while true { 
    do { 
     guard let job = try self.queue.dequeue() else { return } 
     job.perform() 

    } catch { 
     print(error) 
    } 
} 

आम तौर पर मैं सब कुछ एक ऑटोरेलीज पूल में लूप में डालता हूं, हालांकि, यह लिनक्स पर उपलब्ध नहीं है। ऐसा लगता है कि ARC लूप में ऑब्जेक्ट्स को कभी भी जारी नहीं कर रहा है। मेमोरी उपयोग को नियंत्रित करने के बारे में मुझे कैसे जाना चाहिए?

उत्तर

5

मुझे विश्वास नहीं है कि ऑटोरेलीज पूल के कारण मेमोरी स्पाइक्स लिनक्स पर एक चीज़ होनी चाहिए। यह संभव है कि कुछ और आपके ऑब्जेक्ट्स के संदर्भ में हो सकता है, हालांकि। लूप के बीच में ब्रेकपॉइंट सेट करने का प्रयास करें, फिर डीबगर में "डीबग मेमोरी ग्राफ" पर क्लिक करें ताकि यह देखने के लिए कि ऑब्जेक्ट्स में कौन से ऑब्जेक्ट्स का संदर्भ है। यह उन वस्तुओं के कारण को निर्धारित करने में मदद कर सकता है जो उन्हें जितनी देर तक रहना चाहिए।

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