PHP经过的时间在一定时间后发生变化

时间:2013-04-16 05:22:16

标签: php

我计算了程序中两个进程的经过时间。当我在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";
    }

1 个答案:

答案 0 :(得分:1)

涉及数十个因素。只列出一些:

如果HD处于忙碌状态,则会影响程序加载所需的时间。在Windows上,它常常是因为我不断进行ACL查询。即使大多数内容以某种形式缓存,但PHP本身并不缓存脚本,并且每次都会读取和解析它。

您的MySQL服务器可能正在开发模式下运行,这会降低其响应能力和内存使用率,以确定用户进程的优先级。它也可能有或没有你在缓存中尝试SELECT的行,当然,当我们谈论毫秒时,它可以产生很大的不同。多次运行相同的查询可能会导致MySQL在缓存中使用它,这可以解释为什么它会在一段时间后变得更快。

Sinse Windows XP有Prefetcher,这是一种技术,可记录您的程序需要加载的内容,以便下次运行时加载速度更快。如果您在计算机上首次运行程序时发现程序速度如此之慢,您现在就明白了原因。从第二次开始,由于Prefetcher,它将会提升。但据我所知,每次后续运行都没有进一步的改进,所以它可能在这里影响不大。

并且在Windows Vista中,每个Windows版本都附带SuperFetch,这项技术可以将常用程序预先加载到RAM的“未使用”部分,如果你的幸运,那么当选它可以解释为什么这种提升发生了。这也是为什么机器上的Windows Vista在大量RAM的情况下会表现得更好,即使你没有全部使用它。