Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java] Tempo di calcolo di una espressione tra Nashorn e Un mio algoritmo ]

    Buonasera a tutti,

    Ho provato a fare un confronto tra un programma creato da me ed uno ben noto: il "Nashorn".

    Non so se posso ottimizzare il mio Algoritmo:

    - Infatti esso richiama ricorsivamente il costruttore, e dai fatti, ossia dai tempi calcolati risulta ben più rapido per poche operazioni, ma ben più lento quando le operazioni aumentano (cicli for/while)

    Ecco qui ad esempio, un confronto quasi equo per un valore di circa 50 cicli:
    Se i cicli son minori, il mio algoritmo è più veloce ma nella situazione più conveniente di maggior numero(>50) inizia a decrescere in favore del Nashorn.

    codice:
    
    
    codice:
      package run;
       import javax.script.Bindings;
     import javax.script.ScriptEngine;
     import javax.script.ScriptException;
      import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory;
      import expression.*;
       publicclass Run {
      publicstaticvoid main(String[] args) {
     
     
             NashornScriptEngineFactory nse = new NashornScriptEngineFactory();
     
             ScriptEngine s = nse.getScriptEngine("Nashorn");
     
             String expression = "10.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((15.2 - 15.0)*(15.2 - 14.9)*(15.2 - 14.8))+20.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((5.2 - 15.0)*(5.2 - 14.9)*(15.2 - 14.8))";
     
             Bindings b = s.createBindings();
     
             Object result = null;
     
     try {                    
     
      longtimeX = System.currentTimeMillis();
     
     for(intx=0; x<5; x++) {
     
     b.put("x", x);
     
     result = s.eval(expression, b);
     
                 }
     
                 System.out.println(result);
     
     longtimeY = System.currentTimeMillis();
     
     longdt = timeY-timeX;
     
                   System.out.println("Tempo impiegato: " + dt);
     
     
     
             } catch (ScriptException e) {
     
     e.printStackTrace();
     
             }
     
     longtimeX = System.currentTimeMillis();
     
             ValuteExpression ve = new ValuteExpression(expression);
     
     ve.setVariable("x");
     
     
     for(intx=0; x<5; x++) {
     
     ve.put(x);
     
     result = ve.solveExp();
     
             }
     
             System.out.println(result);
     
     longtimeY = System.currentTimeMillis();
     
     longdt = timeY-timeX;        
      
               System.out.println("Tempo impiegato: " + dt);
         }
      }
    
     
     
    
    


    Concludo che ricreare una risorsa come una classe(ricorsione) consuma molto, o sono altre qui le motivazioni?
    Avete idee per migliorare?
    Ultima modifica di jabjoint; 23-03-2023 a 22:26
    jabjoint

  2. #2
    Ovviamente manca la parte del mio Algoritmo, che non posso postare perché sono molte classi e metodi.
    Ma in se penso che la motivazione della lentezza sia dovuta sopratutto a quanto detto: ricorsione.
    jabjoint

  3. #3
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Buonasera a tutti,

    Ho provato a fare un confronto tra un programma creato da me ed uno ben noto: il "Nashorn".

    Non so se posso ottimizzare il mio Algoritmo:

    - Infatti esso richiama ricorsivamente il costruttore, e dai fatti, ossia dai tempi calcolati risulta ben più rapido per poche operazioni, ma ben più lento quando le operazioni aumentano (cicli for/while)

    Ecco qui ad esempio, un confronto quasi equo per un valore di circa 50 cicli:
    Se i cicli son minori, il mio algoritmo è più veloce ma nella situazione più conveniente di maggior numero(>50) inizia a decrescere in favore del Nashorn.

    codice:
    
    
    codice:
      package run;
       import javax.script.Bindings;
     import javax.script.ScriptEngine;
     import javax.script.ScriptException;
      import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory;
      import expression.*;
       publicclass Run {
      publicstaticvoid main(String[] args) {
     
     
             NashornScriptEngineFactory nse = new NashornScriptEngineFactory();
     
             ScriptEngine s = nse.getScriptEngine("Nashorn");
     
             String expression = "10.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((15.2 - 15.0)*(15.2 - 14.9)*(15.2 - 14.8))+20.6*(x - 15.0)*(x - 14.9)*(x - 14.8)/((5.2 - 15.0)*(5.2 - 14.9)*(15.2 - 14.8))";
     
             Bindings b = s.createBindings();
     
             Object result = null;
     
     try {                    
     
      longtimeX = System.currentTimeMillis();
     
     for(intx=0; x<5; x++) {
     
     b.put("x", x);
     
     result = s.eval(expression, b);
     
                 }
     
                 System.out.println(result);
     
     longtimeY = System.currentTimeMillis();
     
     longdt = timeY-timeX;
     
                   System.out.println("Tempo impiegato: " + dt);
     
     
     
             } catch (ScriptException e) {
     
     e.printStackTrace();
     
             }
     
     longtimeX = System.currentTimeMillis();
     
             ValuteExpression ve = new ValuteExpression(expression);
     
     ve.setVariable("x");
     
     
     for(intx=0; x<5; x++) {
     
     ve.put(x);
     
     result = ve.solveExp();
     
             }
     
             System.out.println(result);
     
     longtimeY = System.currentTimeMillis();
     
     longdt = timeY-timeX;        
      
               System.out.println("Tempo impiegato: " + dt);
         }
      }
    
     
     
    
    


    Concludo che ricreare una risorsa come una classe(ricorsione) consuma molto, o sono altre qui le motivazioni?
    Avete idee per migliorare?
    Sono riuscito in parte a risolvere mettendo null agli oggetti creati.
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.