0

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

1 回答 1

1

涉及的因素有几十个。只列举一些:

如果 HD 很忙,它将影响您的程序加载所需的时间。在 Windows 上,它通常是因为我以外的原因不断地进行 ACL 查询。即使发生的大部分内容以某种形式缓存,PHP 本身也不缓存脚本,并且每次都会读取和解析它。

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

Sinse Windows XP 有Prefetcher,这种技术可以记录程序需要加载的内容,以便下次运行时加载速度更快。如果您在您的机器上第一次运行程序时曾经注意到它的速度如此之慢,那么您现在就会明白为什么了。从第二次运行开始,由于 Prefetcher,它将得到提升。但据我所知,它在每次后续运行中都没有进一步的改进,所以它在这里可能没什么影响。

And sinse Windows Vista, every Windows version also comes with SuperFetch , a technology that keeps commonly used programs pre-loaded in the "non-used" part of the RAM, and if yours was lucky enough to be elected it may explain why this boost发生了。这也是为什么机器上的 Windows Vista 会在更大容量的 RAM 下表现得更好,即使你没有全部使用它。

于 2013-04-16T05:55:42.617 回答