我计算了程序中两个进程的经过时间。当我在0.203秒执行程序时,但如果我离开页面一段时间,则经过时间变化并变为0.173。对此有什么看法?我的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 :(得分:1)
涉及数十个因素。只列出一些:
如果HD处于忙碌状态,则会影响程序加载所需的时间。在Windows上,它常常是因为我不断进行ACL查询。即使大多数内容以某种形式缓存,但PHP本身并不缓存脚本,并且每次都会读取和解析它。
您的MySQL服务器可能正在开发模式下运行,这会降低其响应能力和内存使用率,以确定用户进程的优先级。它也可能有或没有你在缓存中尝试SELECT
的行,当然,当我们谈论毫秒时,它可以产生很大的不同。多次运行相同的查询可能会导致MySQL在缓存中使用它,这可以解释为什么它会在一段时间后变得更快。
Sinse Windows XP有Prefetcher,这是一种技术,可记录您的程序需要加载的内容,以便下次运行时加载速度更快。如果您在计算机上首次运行程序时发现程序速度如此之慢,您现在就明白了原因。从第二次开始,由于Prefetcher,它将会提升。但据我所知,每次后续运行都没有进一步的改进,所以它可能在这里影响不大。
并且在Windows Vista中,每个Windows版本都附带SuperFetch,这项技术可以将常用程序预先加载到RAM的“未使用”部分,如果你的幸运,那么当选它可以解释为什么这种提升发生了。这也是为什么机器上的Windows Vista在大量RAM的情况下会表现得更好,即使你没有全部使用它。