Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [JAVA] info tempi d'esecuzione

    Ciao ragazzi vorrei chiedere un informazione...
    In poche parole sto utilizzando una Arraylist nel quale ho caricato 10000 stringe.
    Successivamente ho effettuato 1000 ricerche ,dalla PRIMA posizione dell'arraylist fino alla numero 1000, salvandomi tutti i tempi di ricerca effettuati:
    codice:
    double start = System.nanoTime();
     struct.contains(e);					 //SERCH//
    double end = System.nanoTime();
    boxTempArray.add(end - start);
    Dopo aver fatto tutto cio' ho analizzato i dati immagazzinati stampandoli in un grafico:

    Come potete vedere dal grafico spesso si presentano dei picchi (ha cosa sono dovuti??).
    Ovviamente visti nel grafico sembrano moltissimi ma in realta ad ogni picco corrisponde a UN SOLO valore(pasticciando tutto il grafico).
    In un ARRAYLIST (la cointais(int index) ovvero la mia search)il tempo per cercare un valore aumenta con il crescere di index => il grafico è giusto.
    Il problema sono:
    -come mai ho questi picchi??
    - come mai nella prima parte impenna, diminuire drasticamente per ripartire successivamente a crescere?
    Sbaglio io a prendere i tempi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    La raccolta dei tempi mi pare giusta. La domanda è quante volte l'hai eseguito? Secondo me dovresti interpolare i risultati di svariati test analoghi per avere un risultato più attendibile
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Quel grafico rispecchia una sola ricerca di 1000 elementi.
    Il punto che potrei fare 100 ricerche uguali ma il grafico verrebbe sempre sballato con quei picchi...conta che ho fatto tantissime prove e ogni volta compaiono.
    Potrebbe essere un problema di risorse? il processore dedica il suo tempo in un particolare modo?...attendo suggerimenti

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da albymotard
    Quel grafico rispecchia una sola ricerca di 1000 elementi.
    Il punto che potrei fare 100 ricerche uguali ma il grafico verrebbe sempre sballato con quei picchi...conta che ho fatto tantissime prove e ogni volta compaiono.
    Potrebbe essere un problema di risorse? il processore dedica il suo tempo in un particolare modo?...attendo suggerimenti
    scusa come è fatta l'arraylist?
    cosa contiene?
    a cosa corrisponde uno dei picchi??
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    penso che di picchi ne vedrai sempre, magari spostati qui e lì: il tuo sistema sarà impegnato in mille cose diverse, oltre che a gestire la JVM su cui gira il tuo programma.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Il mio arraylist contiene stringhe di numeri (che non si ripetono mai) e non contiene valori nulli.
    Gli elementi vengo aggiunti con la normale add e cercati con la contains(quindi la mia search sarebbe la mia conteins).
    I picchi corrispondo a un tempo di ricerca "alto" per un determinato valore.
    Sulle y ho i micro secondi che vanno da 0 a 50.
    La mia retta dovrebbe crescere in modo lineare (ricordo che cerco valori sequenziali che vanno da 1 a 1000 quindi prima cerco il valore in posizione 1, poi quello in posizione 2, poi quello in terza.....fino al 1000 valore) perchè più vado avanti a cercare nella lista, più tempo ci metterò a trovare i valori.
    A volte però il valore è troppo alto...per esempio il valore in posizione 500(che sarà a metà grafico) viene trovato in 25 microsecondi, il valore in posizione 501 in 50 microsecondi , il valore in posizione 502 in 25 microsecondi....creandomi questi picchi...non riesco a capire come mai a volte ci mette cosi tanto tempo...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Infatti andrea....potrebbe essere dovuto alla gestione della cpu? nel senso che le risorse del pc vengo dedicate sempre in maniera diversa??...difatti bene o male la linea del grafico è abbastanza definita, nel senso che si capisce abbastanza bene il grafico (cresce in maniera lineare)...solo che volevo capire come mai ogni tanto crea queste picchi

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    è esattamente per questo che ti suggerivo di ripetere il test svariate volte, in caso salvando i dati in un formato intermedio, interpolandoli e poi generandoti il grafico dai dati interpolati.

    La cosa buona è che il grafico è quello atteso. Ci sarebbe stato da preoccuparsi se il grafico fosse stato una spezzata o una qualsiasi altra cosa non linearmente crescente.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    tieni conto anche che in genere l'ArrayList è una struttura dati non ordinata, quindi anche se tu inserisci i valori 1, 2, 3, 4, 5, 6 ecc in realtà non è detto che dall'ArrayList questi siano contenuti nell'esatto ordine, un picchio nel "reperire" un dato potrebbe essere causato anche da questo.

    Un altro picchio potrebbe essere l'intervento del GC, ma visto che la curva è all'inizio mi pare poco plausibile.

    Non mi viene in mente altro, aumenta il numero di tentativi (fanne 10000), mentre aspetti vai al bar (non fare fare altro al pc, non aprire altri programmi, se non usi un IDE è pure meglio) e dicci se l'andamento è uguale o se i picchi si abbassano
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Lo faccio e vi terro' aggiornato...cmq una cosa...è vero che l'arraylist non ordina (come ad esempio il treeset) pero' tiene l'ordine d'inserimento(giusto no?)....quindi se inserisco 1 2 3 4 5 6 con questo esatto ordine e facessi la mia search usando l'indice del'array list il tempo dovrebbe crescere in modo lineare.
    E' questo che non mi torna....quel grafico rappresenta una ricerca per indice, quindi i picchi dovuti a "ricerche più lontane" non dovrebbero esiste visto che cerco l'elemento in posizione 1, poi quello in posizione 2, poi in 3...quindi non passera mai da 2, poi 3, poi 430, poi 4.....almeno che questa cosa a livello molto basso venga gestita in un altro modo, ovvero che anche se avanzo per indice in realtà essi sono sparpagliati...può essere?

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.