2013-04-16 6 views
0

J'ai calculé le temps écoulé de deux processus dans mon programme. Quand j'exécute le programme, le temps s'écoule en 0,203 sec mais si je quitte la page pendant un moment, le temps écoulé change et devient 0,173. Quelle est la réaction pour cela? Mon programme php estPHP temps écoulé après un certain temps

include ('db.php'); 
$data=array(); 

session_start(); 
$start_time= microtime(true); 
if (isset($_SESSION['img'])) 
    { 
    $image=$_SESSION['img']; 
    $addr="C:/Users/adithi.a/Desktop/FashionSearch/trial/db_features/distrib/db_features.exe $image"; 
    exec($addr,$data); 

    /*for($i=18;$i<=34;$i++) 
     { 
      if($i!=30) 
      { 
      echo $data[$i]."<br>"; 
      } 
     }*/ 
    $start_time1=microtime(true); 
    $result=mysql_query("select tbl_features.img_id,img_path,((pow(($data[18]-features_1),2))+(pow(($data[19]-features_2),2))+(pow(($data[20]-features_3),2))+(pow(($data[21]-features_4),2))+(pow(($data[22]-features_5),2))+(pow(($data[23]-features_6),2))+(pow(($data[24]-features_7),2))+(pow(($data[25]-features_8),2))+(pow(($data[26]-features_9),2))+(pow(($data[27]-features_10),2))+(pow(($data[28]-features_11),2))+(pow(($data[29]-features_12),2))+(pow(($data[31]-features_13),2))+(pow(($data[32]-features_14),2))+(pow(($data[33]-features_15),2))+(pow(($data[34]-features_16),2))) as distance from tbl_features join tbl_image where tbl_features.img_id=tbl_image.img_id AND tbl_features.img_id>=92303 AND tbl_features.img_id<124232 ORDER BY distance ASC LIMIT 6") or die(mysql_error()); 
    while($num=mysql_fetch_assoc($result)) 
     { 
     echo "<a href='Dressinformation.php?image=$num[img_id]'><div class='imgdiv'><img src='$num[img_path]'></div></a>"; 
     //echo $num["img_id"]." ".$num["img_path"]." ".$num["distance"]."<br>"; 
     } 

    $stop_time1= microtime(true); 
    $time1=$stop_time1-$start_time1; 
    print "Euclidean distance time is $time1 seconds"; 


    $stop_time= microtime(true); 
    $time=$stop_time-$start_time; 
    print "elapse time was $time seconds."; 
    } 

else 
    { 
    echo "Please upload image"; 
    } 
+0

Votre liste de processus a peut-être été modifiée? – BlitZ

+1

Les ordinateurs de bureau et les logiciels ne fonctionnent pas en temps réel. Les processus sont constamment en attente les uns des autres dans un ordinateur régulier, et il y a des centaines de processus en cours d'exécution à un moment donné. Rien ne s'exécute dans un temps prévisible ou constant. – deceze

Répondre

1

Plusieurs dizaines de facteurs sont impliqués. Il suffit de lister certains:

Si le HD est occupé, cela affectera la durée de chargement de votre programme. Sur Windows, il est généralement, sinse son constamment faire des requêtes ACL pour des raisons qui me dépassent. Même si la plupart des choses en cours sont mises en cache sous une forme ou une autre, PHP seul ne cache pas les scripts et les lira et les analysera à chaque fois. Votre serveur MySQL fonctionne probablement en mode Dev, ce qui réduit sa réactivité et son utilisation de la mémoire pour prioriser les processus de l'utilisateur. Il peut également avoir ou non les lignes que vous essayez de SELECT dans le cache, et bien sûr, lorsque nous parlons de millisecondes, cela peut faire beaucoup de différence. Exécuter la même requête plusieurs fois peut amener MySQL à la rendre disponible en cache, ce qui peut expliquer pourquoi il devient plus rapide après un certain temps.

Sinse Windows XP il ya le Prefetcher, une technologie qui conserve un enregistrement de ce que votre programme a besoin de charger afin qu'il se charge plus rapidement la prochaine fois que vous l'exécutez. Si vous avez déjà remarqué à quel point un programme est beaucoup plus lent lorsque vous le lancez pour la première fois sur votre machine, vous voyez maintenant pourquoi. À partir de la deuxième manche, il sera boosté grâce au Prefetcher. Mais pour autant que je sache, il n'y a pas d'autres améliorations à chaque course subséquente, donc c'est probablement sans grand effet ici.

Et sinse Windows Vista, toutes les versions de Windows est également livré avec SuperFetch, une technologie qui maintient des programmes couramment utilisés pré-chargés dans le « non utilisé » une partie de la RAM, et si le vôtre a eu la chance d'être élu, il peut expliquer pourquoi ce coup de pouce est arrivé. C'est aussi pourquoi, à partir de Windows Vista sur la machine, les performances seront bien meilleures avec de plus grandes quantités de RAM, même si vous ne les utilisez pas toutes.

Questions connexes