IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème -005 avec microctime()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut Problème -005 avec microctime()
    Bonjour, je cherche à évaluer et tester les vitesses d'exécution de différents scripts et j'ai donc fais une petite classe pour aller plus vite..

    Pour tester le script, je compare la vitesse de in_array() et d'une fonction utilisateur utilisant foreach pour obtenir le même résultat.

    Pour plus de précision je fais exécuter 100 fois le script sur chaque fonction.

    Le problème est que microtime() du temps de fin - le temps de début renvoit une valeur erronée (ex: 10 sec) suivi de -005..

    Je me doute bien qu'il y a un problème mais lequel ?

    La classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
     
    class ex_timer {
     
    	private $timers;
     
    	public function start($id) {
    		$this->timers[$id]["t_s"] = microtime(true);
    	}
     
    	public function stop($id) {
    		$this->timers[$id]["t_e"] = microtime(true);
    	}
     
    	public function save($u_fichier,$id) {
    		if(!isset($this->timers[$id]))
    			die("EX TIMER : ID inconnu");
    		if(!isset($this->timers[$id]["t_s"]))
    			die("EX TIMER : Impossible de sauvegarder");
    		if(!isset($this->timers[$id]["t_e"]))
    			die("EX TIMER : Impossible de sauvegarder");
     
    		$fo = fopen($u_fichier,"a");
     
    		fputs($fo,$this->timers[$id]["t_e"]-$this->timers[$id]["t_s"]."\n");
     
    		fclose($fo);
    	}
     
    	public function result($id) {
    			return ($this->timers[$id]["t_e"])-($this->timers[$id]["t_s"]);
    	}
     
    	public function compare_files($uf1,$uf2) {
    		if(!file_exists($uf1) or !file_exists($uf1))
    			die("EX TIMER : Fichier(s) introuvable(s)");
     
    		$f1 = array_map("rtrim",file($uf1));
    		$f2 = array_map("rtrim",file($uf2));
     
    		// m = moyenne
     
    		$m_f1 = 0;
    		$m_f2 = 0;
     
    		foreach($f1 as $valeur) {
    			$m_f1 += $valeur;
    		}
     
    		foreach($f2 as $valeur) {
    			$m_f2 += $valeur;
    		}
     
    		$m_f1 /= count($f1);
    		$m_f2 /= count($f2);
     
    		if($m_f1 < $m_f2)
    			$comp = "Le temps n°1 est le plus rapide (".$m_f2-$m_f1.") => ".$m_f2/$m_f1."x plus rapide";
    		elseif($m_f1 > $m_f2)
    			$comp = "Le temps n°2 est le plus rapide (".$m_f1-$m_f2.") => ".$m_f2/$m_f1."x plus rapide";
     
    		return "
    		<table bgcolor=\"black\" color='white' border=1 cellpadding=3 cellspacing=0>
    			<tr>
    				<td><b>caract.\fichiers</b></td><td><b>Fichier N°1</b></td><td><b>Fichier N°2</b></td>
    			</tr>
    			<tr>
    				<td><b>Temps moyen d'exécution</b></td><td><b>".$m_f1."</b></td><td><b>".$m_f2."</b></td>
    			</tr>
    			<tr>
    				<td colspan=3><b>".$comp."</b></td>
    			</tr>
    		</table>
    				";
     
    	}
    }
     
    ?>
    Le code d'exéction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
    require_once("ex_timer.class.php");
     
    $t = new ex_timer;
     
    function in_array_fe($needle,$haystack) {
    	foreach($haystack as $valeur) {
    		if($needle == $valeur)
    		return true;
    	}
    }
     
    $tab = array("jambon","fromage","riz","pates","pain","chocolat","biscuit");
     
    for($i=0;$i<1;$i++) {
    	$t->start("foreach");
    		if(in_array_fe("pain",$tab))
    		$trouve = true;
    	$t->stop("foreach");
    	$t->save("foreach.txt","foreach");
    }
     
    for($i=0;$i<1;$i++) {
    	$t->start("in_array");
    		if(in_array("pain",$tab))
    		$trouve = true;
    	$t->stop("in_array");
    	$t->save("in_array.txt","in_array");
    }
     
    //echo $t->result("if");
     
    ?>

  2. #2
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    Personne ne sait ce que c'est ?

    Voici ce que je retire de mon fichier... :

    1.81198120117E-005
    1.69277191162E-005
    3.50475311279E-005
    7.20024108887E-005
    4.10079956055E-005
    3.91006469727E-005
    6.103515625E-005
    1.59740447998E-005
    1.38282775879E-005
    1.38282775879E-005
    1.4066696167E-005

  3. #3
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    c'est une notation scientifique !

    en gros 1.5E-005 ca correspond a 1.5 * 10 puissance (-5)
    soit 0.000015

  4. #4
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    ARFF lol j'y ai pas pensé Et il n'y a pas moyen de mettre le résultat en chiffre directement ? Si j'arrondi ?

  5. #5
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    essaies number_format() en disant que tu acceptes par exemple 6 chiffres apres la virgule
    mais ca sera moins lisible !
    ca revient a dire "le temps est de 0.000015 secondes"

    tu peux aussi diviser par mille pour avoir le résultat en milliseconde, ou par 1 000 000 pour avoir le résultat en microsecondes.

  6. #6
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    Nikel merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Locate avec espaces
    Par Clezio dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/03/2004, 19h06
  2. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  3. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 12h00
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo