Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 22h14   #1
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
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 :
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 :
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");
 
?>
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 10h12   #2
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
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
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 10h18   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
c'est une notation scientifique !

en gros 1.5E-005 ca correspond a 1.5 * 10 puissance (-5)
soit 0.000015
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 10h30   #4
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
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 ?
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 10h42   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 10h50   #6
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Nikel merci !
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h58.


 
 
 
 
Partenaires

Hébergement Web