hie dharmendra,
this is was post regarding memory leakage answered by jitendra earlier.. i think this may help you.. Well there may be some references still alive in the memory(Reachable reference). When you add any addEventListener please remove this with removeEventListener. This will make those references eligible for garbage collection. And also try to make those objects as weak references. Read abt weak references. It is not advisable . But upto some extent you can do this. There is a blog by Alex Huari for memory management . Do some google. On 6/27/09, 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> > > > > -- Regards Jagan Mady's --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

