I have gone throw your tutorial on you blog  and I profiled my with. I
could see so many loitering object hanging around  , I evaluted them
based upon the method suggetsed on your blog.
Potential  Loitering Obejct which I could see is -

    * Objects
    * Strings
On drill down , I found tons of obejct of following :-
       AbstradeDataServies
       NetConnetions
        ManagedObjectPeoxy- It is refering to DataGridItemRenderer

  Worst part is they keep increasing everytime when I load the  data and
remove it.

I have removed all my custom code and now app is very bare bone.Lately I
though I could seek help from flexCoders.

- Dharmendra

























--- In [email protected], Alex Harui <aha...@...> wrote:
>
> What does the memory profiler say?  There's a "tutorial" on how to use
it on my blog.
>
> Alex Harui
> Flex SDK Developer
> Adobe Systems Inc.<http://www.adobe.com/>
> Blog: http://blogs.adobe.com/aharui
>
> From: [email protected] [mailto:[email protected]]
On Behalf Of Dharmendra Chauhan
> Sent: Friday, June 26, 2009 10:21 PM
> To: [email protected]
> Subject: [flexcoders] Memory Leak in DataServices based App ??
>
>
>
>
>
> 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 remoteServi! ce: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() ;
>   ! ; & nbsp;        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.t! ext ,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();
>        &nb! sp;  ; 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 al! so created scalled down war file which can be deployed on
any  java application server.Just provide your emial Id , Iwill send
that to you.
>
> 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.Colle! ctionEvent;
>        ! 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;
>     &n! bsp; 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;
>     &! nbsp;&nb sp;
>
>        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(nul! l);
>                tradeService.release();
>               // tradeService.releaseCollection(tradeCollection);
>               tradeService.channelSet.disconnectAll();
>                tradeService.disconnect();
>                tradeService.logout();
>                //tradeService.dataStore = null;
>        }
>                /*Function for creating destination*/
>     &nb! sp;    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.s! ource = new Array();
>              tradeList.dataProvider = null;
>         }
>            tradeService.release();
>           // tradeService.releaseCollection(tradeCollection);
>          tradeService.channelSet.disconnectAll();
>          tradeService.disconnect();
>           tradeService.logout();
>           System.gc();
>         }
>
>
>       public function loadData():void
>    &nb! sp;    {      &nb! sp;  ;
>         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"
>  &nbs! p;            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"
>         &nbs! p;       />
>   &n! bsp;&nbs p;            <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"
>                 />
>         &! nbsp;       <mx:DataGridColum! n  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"
>               &nb! sp; />
>
>
>
>             </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"/>
>               &nbs! p;         </mx:Gri! dItem> ;
>                         <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>
>                      &! nbsp;  <mx:GridItem width="100%"
height="100%">! ;
> &nb sp;                               <mx:Label text="Total Memory"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:TextInput text="Total Memory"
id="memory"   width="97"/>
>                         &! lt;/mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                                 <mx:Label text="Grid Row Count"/>
>                         </mx:GridItem>
>                         <mx:GridItem width="100%" height="100%">
>                               &nbs! p; <mx:TextInput
name="GridRowCountN" id="GridRowCount! " & nbsp; width="97"/>
>                         </mx:GridItem>
>                 </mx:GridRow>
>
>
>
>         </mx:Grid>
>
>
> </mx:Application>
>

Reply via email to