2011-01-25 12 views
1

のCPU使用率を測定するためには、私はこのようにそれを使用してみました結果、ようなもの3.0994415283203E-6PHPのmicrotimeを使用して()関数/コード・ブロック

私は間違っていますか?

+1

'sleep(5);'コールを入れて、結果が変わることを確認してください。時間は少なくとも5秒でなければなりません。 –

+0

そのように思えます。私は '4.9997820854187'を得ます – Alex

+9

うわー! PHPは高速です!それは5秒以内に 'sleep(5);'を評価します! – Joel

答えて

6

より良い解決策。操作を平均化するためにコードを複数回実行します。

$runs = 500; 

$start = microtime(true); 
for ($i = 0; $i < $runs; $i++) { 
    //cpu expensive code here 
} 
$end = microtime(true); 
$elapsed = number_format($end - $start, 4); 
$one = number_format(($end - $start)/500, 7); 
echo "500 runs in $elapsed seconds, average of $one seconds per call"; 
+0

これははるかによく見える、ありがとう:) – Alex

+0

私はこの小数点以下5桁で十分とは思わない。 – Jonah

+0

次に、6日または7日を追加します。しかし、私は本当に "高価な"コードがe^-5以下で実行されるのではないかと疑う。 – ircmaxell

3

3.0994415283203E-6は、0.0000030994415283203と等しい。

E-6は、小数点を6桁左に移動するように指示します。 E+6は反対を意味します。 @decezeが述べたように、これは科学的表記法と呼ばれています。

パフォーマンステストを行っている場合は、コードを100000程度の反復ループに入れてから、結果の時間を100000で除算することをお勧めします。これにより、より正確な平均を得ることができます。

1

あなたは間違ったことはしていませんが、実際にタイミングを取っているコードは実際にはわずか1秒しかかかりません。

証明したい場合は、sleepを数秒間押してください。

1

オプションの引数なしでmicrotime()を使用しているように見えますが、あなたは、あなたがしているので、私は100%を確認していないと言います。

何がこれの出力です:

$now = microtime(true); 
sleep(1); 
echo microtime(true) - $now; 
+1

'true'はオプションの引数です。 – Joel

0

PHPは、常にそれがどのように高速で私を驚かせます。あなたのコードは正しいと思われます。たぶんあなたのコードは実際には3ミリ秒かかるだけです。

あなたはこのように長いループ、何かを作ってみることができます:

$x=0; 
while ($x<1000000) 
    { 
    $x++; 
    } 

はあなたのタイマーの内側にこのコードを追加します。私にとっては、100万回ループするのには通常約1/2秒かかります。これがあなたの時間を変えるかどうかを見てください。

+1

なぜ 'sleep'や' usleep'を使って推量するのではなく、測定可能な量を遅らせるのですか? – ircmaxell

+0

@ ircmaxell - わかりません。それは問題ではありません。これは私の心に来た最初のものでした。 – Joel

関連する問題