Hi,
Arrays, Objects used as Maps, Dictionary are common causes
Failure to remove event listeners is One more cause

chandu


On Sat, Jun 27, 2009 at 9:25 PM, Dharmendra Chouhan
<[email protected]>wrote:


> Hi All,
>
>      I have  very basic application which uses  DataSerives over RTMP
> channel  to populate dataGrid , I have not used any  user defined
> component.
>
> This application has got LOAD data and Remove data  Button just to
> simulate the actual application
>
> What happens , when I click on LOAD data , It  loads the data from
> server(JBOSS) then I Remove all the data and force the GC to run
>
> If I continuously keep loading and removing the  data ,  memory goes
> up every time and after some times It reaches to threshold and
> finally crashes the Browser.
>
> In actual application as soon as user logs in a dedicated DS
> destination is created..
>
>    private function createDestination(destName:String):void{
>             var remoteService:RemoteObject = new RemoteObject
> ("DestinationManager");
>             remoteService.addEventListener(ResultEvent.RESULT,
> resultHandler,false,0,true);
>             var operation:AbstractOperation =
> remoteService.getOperation("createDestination");
>             operation.send(destName);
>             var cs:ChannelSet = new ChannelSet();
>             var rtmpChannel:RTMPChannel = ServerConfig.getChannel("my-
> rtmp") as  RTMPChannel;
>             cs.addChannel(rtmpChannel);
>             tradeService = new DataService() ;
>             tradeService.destination=destName;
>             tradeService.channelSet = cs;
>         }
>
>
> Now when user hits on Load data button to load the trade data ...
>
>   public function loadData():void
>         {
>         var remoteService:RemoteObject  = new RemoteObject
> ("filterRemoteVO");
>         var operation:AbstractOperation = remoteService.getOperation
> ("loadData");
>         tradeService.fill(tradeCollection);
>         operation.send(rowData.text ,GUIID);
>         tradeList.dataProvider = tradeCollection;
>
>         }
>
>
> Remove Data  hit I clean all the resource and released collection :-
>
>      public  function  removeAll():void{
>         if(tradeList.dataProvider){
>              tradeCollection.source = new Array();
>              tradeList.dataProvider.source = new Array();
>              tradeList.dataProvider = null;
>         }
>            tradeService.release();
>           tradeService.releaseCollection(tradeCollection);
>          tradeService.channelSet.disconnectAll();
>          tradeService.disconnect();
>           tradeService.logout();
>           System.gc();
>         }
>
> Except these 3 function I don't have any code which could cause memory
> leak.
>
> I m using
>
>    * LCDS 2.5
>    * Flex 3.0
>    * JBoss4.2
>
>
> Please see the mxml file below   , If  possible please have a look at
> it , I might  not be using dataSerice API correctly.
>
> I have been trying to solve this leak for last two week , I really
> need help from you guys.
> My client has already evaluating other contemporary technology because
> of this memory issue.
>
> I have also created scalled down war file which can be deployed on
> any  java application server.
>
> Any help will greatly be appreciated
>
> Regards,
>
> Dam
> ######################## MXML##########################
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> layout="absolute"
>      creationComplete="init();" height="100%" width="100%"
>     >
>     <mx:Script >
>     <![CDATA[
>         import mx.containers.GridRow;
>           import mx.utils.Base64Decoder;
>         import mx.utils.StringUtil;
>            import mx.events.CollectionEvent;
>         import mx.formatters.Formatter;
>         import mx.events.ResizeEvent;
>         import mx.controls.DataGrid;
>         import mx.effects.Fade;
>         import mx.events.DataGridEvent;
>         import mx.utils.ObjectUtil;
>         import mx.events.ScrollEvent;
>       import mx.formatters.DateFormatter;
>       import mx.events.ListEvent;
>       import mx.data.mxml.DataService;
>       import mx.messaging.config.ServerConfig;
>       import mx.messaging.channels.RTMPChannel;
>       import mx.messaging.ChannelSet;
>       import mx.rpc.AbstractOperation;
>       import mx.rpc.remoting.RemoteObject;
>       import mx.collections.ArrayCollection;
>       import mx.controls.Alert;
>       import mx.rpc.events.ResultEvent;
>       import mx.messaging.messages.*;
>       import mx.messaging.events.*;
>       import mx.controls.Alert;
>
>
>
>        private var GUIID:String;
>        private var lastRollOverIndex:Number;
>
>        public var tradeService:DataService=null;
>        public var tradeCollection:ArrayCollection = new
> ArrayCollection();
>
>       public var flag:Boolean = false;
>
>
>        private function init():void {
>           var guiId:String ="TEST";
>            createDestination(GUIID);
>
>       }
>
>        public function getData():void{
>
>             // memory.text =""+ ((System.totalMemory / 1024)/1024);
>
>        }
>        public function releaseDataServices():void {
>           //  tradeService.fill(null);
>                tradeService.release();
>               // tradeService.releaseCollection(tradeCollection);
>               tradeService.channelSet.disconnectAll();
>                tradeService.disconnect();
>                tradeService.logout();
>                //tradeService.dataStore = null;
>        }
>                /*Function for creating destination*/
>          private function createDestination(destName:String):void{
>             var remoteService:RemoteObject = new RemoteObject
> ("DestinationManager");
>             remoteService.addEventListener(ResultEvent.RESULT,
> resultHandler,false,0,true);
>             var operation:AbstractOperation =
> remoteService.getOperation("createDestination");
>             operation.send(destName);
>             var cs:ChannelSet = new ChannelSet();
>             var rtmpChannel:RTMPChannel = ServerConfig.getChannel("my-
> rtmp") as RTMPChannel;
>             cs.addChannel(rtmpChannel);
>             tradeService = new DataService() ;
>             tradeService.destination=destName;
>             tradeService.channelSet = cs;
>         }
>
>         //This function calls dataservice fill method depending on
> wheather destination is created or not
>        private function resultHandler(event:ResultEvent):void{
>           //call data service as destination is created successfully
>            var status:Boolean = event.result as Boolean
>           // Alert.show("status="+status);
>            if(status){
>
>             getData();
>           }
>           else{
>               //TODO report error to MATS app
>           }
>        }
>      public  function  removeAll():void{
>         if(tradeList.dataProvider){
>              tradeCollection.source = new Array();
>              tradeList.dataProvider.source = new Array();
>              tradeList.dataProvider = null;
>         }
>            tradeService.release();
>           // tradeService.releaseCollection(tradeCollection);
>          tradeService.channelSet.disconnectAll();
>          tradeService.disconnect();
>           tradeService.logout();
>           System.gc();
>         }
>
>
>       public function loadData():void
>         {
>         var remoteService:RemoteObject  = new RemoteObject
> ("filterRemoteVO");
>         var operation:AbstractOperation = remoteService.getOperation
> ("loadData");
>         tradeService.fill(tradeCollection);
>         operation.send(rowData.text ,GUIID);
>         tradeList.dataProvider = tradeCollection;
>
>         }
>
>   ]]>
> </mx:Script>
>
>
>      <mx:DataGrid   id="tradeList"
>             initialize="tradeList.dataProvider = tradeCollection"
> horizontalScrollPolicy="auto"
>               height="659" x="0" y="84">
>
>            <mx:columns>
>                 <mx:DataGridColumn  headerText="Security Description"
> dataField="securityDesc"
>                  />
>                 <mx:DataGridColumn  headerText="B/S"
> dataField="transactionType"
>                 />
>                 <mx:DataGridColumn  headerText="Amount"
> dataField="amount"
>                 />
>                 <mx:DataGridColumn  headerText="Price Text"
> dataField="priceText"
>                 />
>                 <mx:DataGridColumn  headerText="Counterparty"
> dataField="counterParty"
>                 />
>                 <mx:DataGridColumn  headerText="Trade Date"
> dataField="tradeDate"
>                 />
>                 <mx:DataGridColumn  headerText="Settle Date"
> dataField="settleDate"
>                 />
>                 <mx:DataGridColumn  headerText="Trade Status"
> dataField="tradeStatusId"
>                 />
>                 <mx:DataGridColumn  headerText="Trader"
> dataField="trader"
>                 />
>                 <mx:DataGridColumn  headerText="Salesperson"
> dataField="salesperson"
>                 />
>                 <mx:DataGridColumn  headerText="Ticket Number"
> dataField="tradeNumber"
>                 />
>                 <mx:DataGridColumn  headerText="Entry Date"
> dataField="tradeTime"
>                 />
>                 <mx:DataGridColumn  headerText="Cancel Date"
> dataField="cancelDate"
>                 />
>                 <mx:DataGridColumn  headerText="Cancel Time"
> dataField="cancelTime"
>                 />
>
>
>
>             </mx:columns>
>          </mx:DataGrid >
>         <mx:Grid x="149" y="23" width="995">
>                 <mx:GridRow width="100%" height="100%">
>                            <mx:GridItem width="100%" height="100%">
>                                 <mx:Label text="Enter No of
> obejcts"   width="111"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:TextInput name="row"
> id="rowData"   width="97"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:Button  label="Load Data"
> click='loadData()'/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:Button  label="removeAll"
> click='removeAll()'/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:Label text="Total Memory"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:TextInput text="Total Memory"
> id="memory"   width="97"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:Label text="Grid Row Count"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:TextInput name="GridRowCountN"
> id="GridRowCount"   width="97"/>
>                         </mx:GridItem>
>                 </mx:GridRow>
>
>
>
>         </mx:Grid>
>
>
> </mx:Application>
>
> >
>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex 
India Community" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to