2009-03-20 10 views
6

मुझे लगता है कि बनाता है और वस्तुओं लगातार नष्ट कर देता है एक बहुत बड़ी फ्लेक्स & PaperVision3D आवेदन किया है। यह भी एसडब्ल्यूएफ संसाधन फ़ाइलों को लोड और अनलोड करता है। जबकि यह चल रहा है, एसडब्ल्यूएफ धीरे-धीरे स्मृति को लगभग 2 जीबी तक ले जाता है जब यह खिलाड़ी को क्रैक करता है। जाहिर है, मुझे पूरा यकीन है कि मैं उन उदाहरणों के संदर्भ में जाने देता हूं जिन्हें मैं उम्मीद नहीं कर सकता कि जीसी अपना काम करेगा। लेकिन मुझे लगता है कि समस्या कहां है, यह पता लगाने में एक समय है।डिबगिंग FLEX/AS3 स्मृति लीक

मैं प्रोफाइलर और स्मृति स्नैपशॉट, आदि पर कब्जा करने के लिए अपने विकल्पों का उपयोग कर की कोशिश की है - लेकिन मेरी समस्या गोलमाल बनी हुई है। मुझे लगता है कि डीबग फ्लैश प्लेयर का उपयोग कर ज्ञात समस्याएं भी हैं? लेकिन मुझे रिलीज संस्करण का उपयोग करके कोई खुशी नहीं है।

आप FLEX/AS3 का उपयोग कर मेमोरी लीक समस्याओं को ट्रैक करने के बारे में कैसे जाते हैं? कुछ रणनीतियों, चाल, या उपकरण आप खपत का पता लगाने का

उत्तर

3

मैं फ्लेक्स बिल्डर में फ्लेक्स प्रोफाइलर का उपयोग करने का तरीका बताने कुछ भर में ठोकर खाई और यह डिबगिंग में मेरे लिए एक बड़ी मदद था स्म्रति से रिसाव। मैं निश्चित रूप से इसे आजमाने का सुझाव देना चाहूंगा। इसका उपयोग करना बहुत आसान है। कुछ बातें मैंने पाया जब मेरे आवेदन पत्र की रूपरेखा:

बचें का उपयोग कर संग्रह (कम से कम बड़े संग्रह) मूल्य वस्तुओं के गुणों के रूप में। मेरे केर्न्गॉर्म एप्लिकेशन में मेरे पास कई प्रकार के वैल्यू ऑब्जेक्ट क्लासेस थे, और प्रत्येक में "बच्चों" संपत्ति थी जो ArrayCollection थी, और फ़िल्टरिंग के लिए इस्तेमाल किया गया था। प्रोफाइलिंग करते समय, मैंने पाया कि ये मेरी सबसे बड़ी मेमोरी खाने वालों में से एक थे, इसलिए मैंने अपना आवेदन बदलकर "parentId" को int के रूप में स्टोर करने के लिए बदल दिया और फ़िल्टरिंग के लिए इसका इस्तेमाल किया। इस्तेमाल की गई स्मृति काफी कटौती की गई थी। कुछ इस तरह:

पुराना तरीका:

public class Owner1 
{ 
    public var id:int; 
    public var label:String; 
    public var children:ArrayCollection; // Stores any number of Owner2 Objects 
} 

public class Owner2 
{ 
    public var id:int; 
    public var label:String; 
    public var children:ArrayCollection; // Stores any number of Owner3 Objects 
} 

public class Owner3 
{ 
    public var id:int; 
    public var label:String; 
} 

न्यू वे:

public class Owner1 
{ 
    public var id:int; 
    public var label:String; 
} 

public class Owner2 
{ 
    public var id:int; 
    public var label:String; 
    public var parentId:int; // Refers to id of Owner1 Object 
} 

public class Owner3 
{ 
    public var id:int; 
    public var label:String; 
    public var parentId:int; // Refers to id of Owner2 Object 
} 

मैं भी जब वे अब जरूरत नहीं है घटना श्रोताओं को दूर करने का सुझाव देते हैं।

2

अपने स्मृति रिसाव तेजी से बढ़ता है का इस्तेमाल किया है क्या हैं, यह शायद मतलब है जीसी अपना काम करने में विफल हो रहा है। अपने कोड पर एक नज़र डालें और देखें कि आप अपनी ऑब्जेक्ट्स संदर्भ संख्याओं को कम कर सकते हैं (उन्हें null पर सेट करके)। ईवेंट-हैंडलर को कमजोर बनाएं। और फिर से प्रोफाइल।

4

मैं आमतौर पर प्रत्येक वर्ग में एक क्लीनअप विधि लागू करता हूं (क्योंकि एएस में विनाशक नहीं होते हैं)। जीसी के साथ मैंने जो मुख्य समस्या देखी है वह ईवेंट श्रोताओं के साथ है। जो कुछ भी कहा गया है, उसके अतिरिक्त, अज्ञात श्रोता कार्यों से बचने की कोशिश करें (जैसा कि आप उन्हें स्पष्ट रूप से हटा नहीं सकते हैं)। यहाँ कुछ लिंक जो आपके लिए उपयोगी हो सकते हैं:

+0

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/arguments.html#callee – Jotham

3

इस तरह के मुद्दों के कारण मैंने एक ओपन सोर्स लाइब्रेरी विकसित की है जो किसी भी समय आपके चल रहे सभी कार्यक्रमों की निगरानी में मदद करती है। इसे कार्यान्वित करना वास्तव में आसान है और मैंने 10-15 मिनट में परियोजनाओं को फिर से संसाधित किया है जो उन्हें विकसित करने वाले इवेंट कंट्रोलर का उपयोग करने के लिए परिवर्तित कर रहा है।

मूल रूप से आपके परिदृश्य के लिए मैं सभी घटनाओं के माध्यम से दौड़ता हूं और उन्हें प्रतिस्थापित करता हूं: obj.addEventListener (...);

रहे हैं: EC.add (obj, ...);

बाकी ही है कि क्या करेंगे है घटना रजिस्टर और यह पागलपन आसान किसी भी बिंदु आप EC.log() का उपयोग कर चाहते हैं पर अपने सभी घटनाओं को देखने के लिए करते हैं;

सभी विवरण और दस्तावेज मेरी साइट पर हैं, मुझे यह जानना अच्छा लगेगा कि इससे आपकी मदद मिलती है और यदि आप इसके साथ काम करना शुरू करते हैं। अगर आपके पास कोई प्रतिक्रिया अच्छी या बुरी है तो कृपया इसे पोस्ट करने में संकोच न करें और मैं इसे देख लूंगा!

स्थल है: http://fla.as/ec/