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





Reply via email to