Probleme avec un LineSeries affichant 3000 valeurs en Flex

Probleme avec un LineSeries affichant 3000 valeurs en Flex - Flash/ActionScript - Programmation

Marsh Posté le 20-06-2011 à 16:21:46    

Bonjour à tous,  
je vais essayer de décrire mon problème .
Dans le cadre d'un projet je dois construire un graphique temps Réel en utilisant flex.  
J'ai donc essayer trouver un composant répondant à ma problématique , j'ai trouver cela sur le net en cherchant un peu :
http://www.iwobanas.com/2009/07/sc [...] tscroller/
 
-J'ai donc fait quelque test avec ce composant et tout allait bien, on peut zoomer, scroller ...  
Mais malheureusement lorsque je met le dataprovider et que je dépasse 1500 valeurs le déplacement dans le graphique est très ralentis. J'ai chercher à optimiser  le code en suivant ces règles :
http://www.adobe.com/fr/devnet/fle [...] rf_10.html
Rien y  fait les déplacements dans le graphique avec 1500 valeurs est très lent .  
Auriez vous des idées sur les optimisations à apporter .
Voici le code  :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.        xmlns:s="library://ns.adobe.com/flex/spark"
  4.        xmlns:mx="library://ns.adobe.com/flex/mx"
  5.        xmlns:charts="com.iwobanas.charts.*"
  6.        creationComplete="init()"
  7.        >
  8. <fx:Declarations>
  9.  <!-- Place non-visual elements (e.g., services, value objects) here -->
  10.  <charts:ChartScroller id="scroller" chart="{chart}" />
  11. </fx:Declarations>
  12. <fx:Script>
  13.  <![CDATA[
  14.   import com.vector.DataVector;
  15.   import flash.utils.getTimer;
  16.   import mx.collections.ArrayCollection;
  17.   import mx.core.Application;
  18.   import mx.core.FlexGlobals;
  19.   //Application.application.stage.quality = StageQuality.LOW;
  20.   //FlexGlobals.topLevelApplication.stage.quality = StageQuality.LOW;
  21.   /** Variables relatives aux évènements générés par le Timer **/
  22.   // Variable contenant un nombre généré aléatoirement compris entre 0 et 30
  23.   public var nombreGenere:Number;
  24.   // Variable contenant le nombre généré converti en int
  25.   public var nombreInt:int;
  26.   // Instanciation de l'objet Timer avec un décompte de 30 et un intervalle d'une seconde
  27.   public var monTimer:Timer = new Timer(10,3001);
  28.   public var i:uint = 0;
  29.   // Création d'un objet type ArrayCollection qui contiendra les nombres entiers
  30.   // générés aléatoirement
  31.   [Bindable]
  32.   //var valeurs:DataVector = new DataVector();
  33.   var valeurs:ArrayCollection = new ArrayCollection();
  34.   // Création d'un objet type ArrayCollection
  35.   public function init():void
  36.   {
  37.    // Ajout un écouteur sur le timer lorsque le Timer tourne
  38.    //monTimer.addEventListener(TimerEvent.TIMER, genererNombre);
  39.    // Active le timer
  40.    //monTimer.start();
  41.    trace(getTimer());
  42.    for(var j:uint = 0 ;j< 3000;j++)
  43.    {
  44.     genererNombre();
  45.     if(j == 3000)
  46.     {
  47.      trace(getTimer());
  48.      chart.dataProvider = valeurs;
  49.      chart.validateNow();
  50.      trace(getTimer());
  51.     }
  52.    }
  53.   }
  54.   public function genererNombre():void
  55.   {
  56.    i++;
  57.    // Génère un nombre aléatoire compris entre 0 et 30
  58.    nombreGenere = Math.random() * 10 ;
  59.    // Arrondi le nombre de type float  
  60.    nombreInt = Math.round(nombreGenere);
  61.    // Ajout ce nombre arrondi dans l'ArrayCollection
  62.    valeurs.addItem({y1: nombreInt, y2: valeurs.length});
  63.    //chart.validateNow();
  64.    // Affichage d'un message confirmant l'ajout
  65.    //monLab.text = "Ajout de la valeur " + nombreInt + " dans l'ArrayList";  
  66.   }
  67.  ]]>
  68. </fx:Script>
  69. <mx:Panel title="ChartScroller example - 2 series with DateTimeAxis" width="100%" height="100%">
  70.  <mx:LineChart id="chart" width="820" height="337"
  71.       gutterLeft="40" gutterRight="10"  >
  72.   <mx:series>
  73.    <mx:LineSeries id="series2" xField="y2" yField="y1" horizontalAxis="{lhAxis}"  />
  74.   </mx:series>
  75.   <mx:horizontalAxis>
  76.    <mx:LinearAxis id="lhAxis" minimum="0" maximum="10" >
  77.    </mx:LinearAxis>
  78.   </mx:horizontalAxis>
  79.   <mx:verticalAxis>
  80.    <mx:LinearAxis id="vAxis1" maximum="10" />
  81.   </mx:verticalAxis>
  82.   <mx:horizontalAxisRenderers>
  83.    <mx:AxisRenderer placement="bottom" axis="{lhAxis}" />
  84.   </mx:horizontalAxisRenderers>
  85.  </mx:LineChart>
  86. </mx:Panel>
  87. </s:WindowedApplication>


A++ merci d'avance.


---------------
Mon topic VDS/ACH
Reply

Marsh Posté le 20-06-2011 à 16:21:46   

Reply

Marsh Posté le 22-06-2011 à 23:28:31    

Personne pour m'éclairer ? ;)


---------------
Mon topic VDS/ACH
Reply

Marsh Posté le 18-07-2011 à 10:39:10    

up


---------------
Mon topic VDS/ACH
Reply

Marsh Posté le 26-07-2011 à 21:56:44    

up


---------------
Mon topic VDS/ACH
Reply

Marsh Posté le 28-07-2011 à 21:20:56    

en regardant vite fait, ta boucle est configurée tel que j n'atteindra jamais 3000 puisque tu as utiliser "<" et non "<=" à 3000...


Message édité par abais le 28-07-2011 à 21:21:18

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed