| Discussion Home | About | Threads By Date | Search |
Title
Approaches identified for Flex Memory Management
Content
Hi All,
I am in the process of making a Flex Memory management approach document which will primarily cover the areas related to Flex GC and the Flex memory costly processes and also the workarounds that how can we resolve them.
I will update on that very shortly......
Thanx
Appy
|
|
posted 08/11/09 by Appyfizz007 | Report Abuse <p>Hi All,</p> <p>I am sharing few of the analysis I had in my past experience with Flex memory management.</p> <p>Please go through it as it might be quite helpful in the memory management in your projects.</p> <p> </p> <p>Thanks</p> <p>Appy </p> <p> </p> <p> </p> |
|
|
posted 08/11/09 by Appyfizz007 | Report Abuse <h1 style="background: #e0e0e0; margin: 12pt 0in 12pt 0.3in; text-indent: -0.3in; text-align: center; tab-stops: list .3in; mso-list: l0 level1 lfo1;"><a name="_Toc235961581"><span class="Heading3Char"><span style="font-size: 14pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">1.<span style="font: 7pt "Times New Roman";"> </span></span></span></span><span class="Heading3Char"><span style="font-size: 14pt; font-family: Arial;">Painful areas </span></span></a><span class="Heading3Char"><span style="font-size: 14pt; font-family: Arial;"></span></span></h1> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Arial;">The following issues which might be critical in our application</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">1.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; font-family: Arial;">Flex</span></strong><span style="font-size: 13pt; font-family: Arial;"> <strong style="mso-bidi-font-weight: normal;">Event Listeners</strong></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Best Practice: </span></strong><span style="font-size: 11pt; font-family: Arial;">Always make Weak Reference “true” for any event listeners we make.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Actual:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN">textInput.addEventListener('change', handleTextChanged, false, 0, <strong style="mso-bidi-font-weight: normal;">false</strong>);</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN">Expected:<br /></span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN">textInput.addEventListener('change', handleTextChanged, false, 0, <strong style="mso-bidi-font-weight: normal;">true</strong>);</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-fareast-font-family: Arial; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">2.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN">Flex Cairngorm Event Listeners</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Best Practice: </span></strong><span style="font-size: 11pt; font-family: Arial;"><span style="mso-spacerun: yes;"> </span>Always remove the commands which are not in use.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Example: </span></strong><span style="font-size: 11pt; font-family: Arial;">In Cairngorm we have a Load Command which will be used only during the load of the application and will never be used in the later stage of the application.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">It is always better to remove LoadCommand from the application.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial; mso-ansi-language: EN;" lang="EN">Expected:<br style="mso-special-character: line-break;" /><br style="mso-special-character: line-break;" /></span></strong><span style="font-size: 11pt; font-family: Arial;"></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">How to remove:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">Use <strong style="mso-bidi-font-weight: normal;">removeCommand(eventName)</strong>;</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">This API should be called in the controller of the application.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">3.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; font-family: Arial;">Always use dictionary</span></strong><span style="font-size: 13pt; font-family: Arial;"></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">The model locator should have dictionary objects for huge data storage in the memory cache.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Actual:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">Array Collection and XMLListCollection </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Problem:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">No weak reference parameter is present.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Expected:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">Dictionary </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Solution</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">Weak Reference attribute can be set by passing “true” in the constructor.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Example:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">Var dict:Dictionary = new Dictionary(true);</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">This will pick the dictionary reference for GC when the parent class is removed.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">4.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; font-family: Arial;">Binding</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong><span style="font-size: 11pt; font-family: Arial;">Binding is not removed from the class object if declared statically.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Actual: </span></strong><span style="font-size: 11pt; font-family: Arial;"><mx:Binding source=”” destination=””/><strong style="mso-bidi-font-weight: normal;"></strong></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Expected:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>BindingUtils.bindproperty() or BindingUtils.bindsetter() should be used.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Using the above, binding can be removed while the parent class is destroyed by <span style="mso-tab-count: 1;"> </span>using:</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>//<span style="mso-spacerun: yes;"> </span>watcherSetter.unWatch();</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Note: It is better to use Flight</span></strong><span style="font-size: 14pt;"><span style="font-family: Times New Roman;"> </span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Framework which has Binding API’s which removes the Binding memory leaks occurs in Flex Binding.</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">5.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; font-family: Arial;">Module Loading and Unloading</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Actual: </span></strong><span style="font-size: 11pt; font-family: Arial;">Module Loader or Module Manager for loading and unloading the module. Module Loader multiple instances are created for loading every new module.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;">Expected: </span></strong><span style="font-size: 11pt; font-family: Arial;">Use the same module loader instance for loading and unloading new module. </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">For loading multiple modules, multiple instances needs to be created and each instance should be marked as weak reference.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; font-family: Arial;">For making any instance as weak reference use GSkinner Classes for making an object “weak reference”. <strong style="mso-bidi-font-weight: normal;">Refer to sec: 14</strong></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">6.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; font-family: Arial;">Effect used in Charts</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Actual: </span></strong><span style="font-size: 11pt; font-family: Arial;">Effect are started by calling the method:</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>effectInstance.play();</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span><strong style="mso-bidi-font-weight: normal;">Expected:</strong></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;">Explicitly register an EFFECT_START listener on the effect to set <span style="mso-tab-count: 1;"> </span>EffectManager.lastCreatedEffect = null when the effect plays.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 13pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">7.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; color: #333333; font-family: Arial;">Application domains</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Actual: </span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;">While module is loaded the current module loaded is not considered to <span style="mso-tab-count: 1;"> </span>be loaded in the same domain.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span><strong style="mso-bidi-font-weight: normal;">Expected: </strong>Always make the domain of the module to be “currentdomain”</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span><mx:ModuleLoader ApplicationDomain=”current”/></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 3;"> </span>Or</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>moduleLoaderInstance.applicationdomain = ApplicationDomain.currentDomain</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>This will optimize the module to the current application and the memory utilization <span style="mso-tab-count: 1;"> </span>for the module can be minimized. </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">8.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; color: #333333; font-family: Arial;">States</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Actual: </span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;">States are loaded and removed dynamically which consumes the memory a lot.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span></span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span><strong style="mso-bidi-font-weight: normal;">Expected: </strong>Always try avoiding adding and removing the states while state <span style="mso-tab-count: 1;"> </span>change and the objects can be used judicially by showing/hiding the state <span style="mso-tab-count: 1;"> </span>information.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l1 level1 lfo2;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">9.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; color: #333333; font-family: Arial;">Popup Manager</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Actual: </span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;">Popup is created and destroyed by following the below methods:</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">PopupManager.createPopup() and PopupManager.removePopup()</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Expected:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Popup should be created once and should be added later.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Example:</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Var objPopup = PopupManager.createPopup() // One time</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">objPopup.removePopup(); // Called</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">PopupManager.addPopup(objPopup); // Later for creating the same popup.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">It is always good to remove the created popup and a similar popup should be created only by using addPopup method.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 13pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 13pt; color: #333333; font-family: Arial;">10. <strong style="mso-bidi-font-weight: normal;">Judicial Usage of Static Objects, variable and methods</strong></span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Expected: </span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-spacerun: yes;"> </span>Only the application level objects whose life time is supposed to remain throughout the application lifetime should be declared static objects.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Static Objects and Methods is good in terms of memory consumption but there is no way to allocate Static Objects for GC.</span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;">Static objects hold the memory throughout its life time and Flash Player/ADL never allocates a static object for Garbage Collection. Flash player skips the static objects considering that it has a reference available in the application. </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></p> <p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; tab-stops: list .5in; mso-list: l2 level1 lfo3;"><span style="font-size: 13pt; color: #333333; font-family: Arial; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">11.<span style="font: 7pt "Times New Roman";"> </span></span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 13pt; color: #333333; font-family: Arial;">Use of Runtime Shared Library</span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"> </span></strong></p> <p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11pt; color: #333333; font-family: Arial;"><span style="mso-tab-count: 1;"> </span>Expected:<span style="mso-spacerun: yes;"> </span></span></strong><span style="font-size: 11pt; color: #333333; font-family: Arial;">Runtime shared library should be created for commonly used <span style="mso-tab-count: 1;"> </span>components in the application and it should never be reloaded by every module <span style="mso-tab-count: 1;"> </span>using <span style="mso-tab-count: 1;"> </span>them. </span></p> <p> </p> |
|
|
posted 08/12/09 by Ram p | Report Abuse <p>not very clear with 8th point...can you be more specific....however, I find this very informative! Thx for sharing this.</p> |
|
|
posted 08/12/09 by Appyfizz007 | Report Abuse <p>Hi,</p> <p>In Flex states are used quite often for changing the views of the application.</p> <p>In case of adding new components in the same base view quite a number of operations of adding and removing the child components take place. States that are meant to be changed through often user's interations should not be handled in such a way.</p> <p>In case of similar views of the states all the components should be created at the startup and they should be handled by show/hide operations.</p> <p>Example:</p> <p> <br /><mx:states></p> <p><br /><mx:State name="Register"<br />></p> <p><mx:AddChild relativeTo="{loginForm}" position="lastChild"<br />></p> <p><mx:target></p> <p><mx:FormItem id="confirm" label="Confirm:"<br />><br /><mx:TextInput/></p> <p></mx:FormItem></p> <p></mx:target></p> <p></mx:AddChild></p> <p><mx:SetProperty target="{loginPanel}" name="title" value="Register"<br />/><br /><mx:SetProperty target="{loginButton}" name="label" value="Register"<br />/></p> <p><mx:SetStyle target="{loginButton}<br />" <br />name="<br />color" value="blue"</p> <p>/></p> <p><strong><span style="color: #ff6600;"><!--<mx:RemoveChild target="{registerLink}"/>--><br /><mx:SetProperty target="{registerLink}" name="visible" value="false"</span></strong></p> <p><strong><span style="color: #ff6600;">/><br /><mx:SetProperty target="{registerLink}" name="includeInLayout" value="false"</span></strong></p> <p><strong><span style="color: #ff6600;">/><br /></span></strong><mx:AddChild relativeTo="{spacer1}" position="before"</p> <p>><br /><mx:target></p> <p><mx:LinkButton id="loginLink" label="Return to Login" click="currentState=''"</p> <p>/></p> <p></mx:target><br /></mx:AddChild></p> <p><br /></mx:State></p> <p><br /></mx:states><br /><!-- Define a Panel container that defines the login form.--><br /><mx:Panel title="Login" id="loginPanel</p> <p>" <br />horizontalScrollPolicy="<br />off" verticalScrollPolicy="off</p> <p>" <br />paddingTop="<br />10" paddingLeft="10" paddingRight="10" paddingBottom="10"</p> <p>><br /><mx:Text width="100%" color="blue</p> <p>" <br />text="<br />Click the 'Need to Register?' link to change state. Click the 'Return to Login' link to return to the base state."</p> <p>/><br /> <br /><mx:Form id="loginForm"</p> <p>></p> <p><mx:FormItem label="Username:"</p> <p>></p> <p><mx:TextInput/></p> <p></mx:FormItem></p> <p><mx:FormItem label="Password:"<br />></p> <p><mx:TextInput/></p> <p></mx:FormItem></p> <p></mx:Form></p> <p><mx:ControlBar></p> <p><br /><mx:LinkButton id="registerLink" label="Need to Register?</p> <p>" <br />click="currentState=</p> <p>'Register'"</p> <p>/></p> <p><br /><mx:Spacer width="100%" id="spacer1"</p> <p>/></p> <p><mx:Button label="Login" id="loginButton"</p> <p>/></p> <p></mx:ControlBar></p> <p></mx:Panel></p> <p><strong>See the bold out colored part in the code.</strong></p> <p> </p> <p>Happy Flexing</p> <p>Thanks</p> <p>Appy</p> <p> </p> <p> </p> <p> </p> |
|
|
posted 09/15/09 by Pankaj Munjal | Report Abuse <p>cool, i like all tricks to avoid memory leaks in Flex.</p> |
|
|
posted 09/29/09 by Ravi S Sharma | Report Abuse <p>Hi,</p> <p>In Section 4 (Module Loading and Unloading) you are redirecting us for "Refer to sec: 14" where we would get this.</p> <p>Thanks<br />Ravi</p> |