2013-04-16 77 views
0

我已經計算了我的程序中兩個進程的經過時間。當我在0.203秒內執行程序時,如果我離開頁面一段時間,經過時間改變並變爲0.173。這是什麼反應?我的php程序是PHP經過的時間在一定時間後發生變化

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

也許你的進程列表改變了? – BlitZ

+1

臺式電腦和軟件不能實時運行。在常規計算機中,進程正在不斷地等待彼此,並且在任何給定時間都有數百個進程正在運行。沒有什麼能在可預測或持續的時間內執行。 – deceze

回答

1

有幾十個因素參與。只是列出一些:

如果HD很忙,它會影響程序加載的時間。在Windows上它通常是,因爲我之外的原因,它不斷地進行ACL查詢。即使大部分內容都以某種形式緩存,PHP本身也不會緩存腳本,並且每次都會讀取並解析它。

你的MySQL服務器的開發模式,從而降低它的響應速度和內存佔用到用戶的過程中優先考慮可能運行。它也可能有,也可能沒有你試圖在緩存中的行,當然,當我們談論毫秒時,它可以產生很大的不同。多次運行相同的查詢可能會導致MySQL使其在緩存中可用,這可以解釋爲什麼它會在一段時間後變得更快。

Sinse Windows XP中有Prefetcher,這是一種記錄程序需要加載的技術,因此下次運行時加載速度會更快。如果你注意到一個程序在你的機器上第一次運行時速度如此之慢,你現在明白了原因。從第二輪開始,由於Prefetcher的推動,它將會上漲。但據我所知,它對每一次後續運行都沒有進一步的改進,所以它在這裏效果可能不大。

而且sinse Windows Vista中,每一個Windows版本還附帶了SuperFetch,即保留常用的程序在RAM中的「未使用」部分預加載技術,如果你很幸運地被選它可能解釋爲什麼這種提升發生。這也是爲什麼從Windows Vista上使用大容量RAM的性能會更好,即使你沒有使用它。

相關問題