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 -~----------~----~----~----~------~----~------~--~---

