Problem :
Belirli bir kod parcasi uzerinde benchmark islemi gerceklestirmek,ve
kodunuzun ne kadar hizli calistigini gormek istiyorsunuz.
Cozum : microtime () fonksiyonu yardimiyla,
islem icin gecen saniye ve milisaniyeleri hesaplayabilirsiniz.
<?php
function microzamani_hesapla ()
{
$m_zaman = microtime();
$m_zaman = explode (" ",$m_zaman);
$m_zaman = doubleval ($m_zaman[1]) + doubleval ($m_zaman[0]);
return ($m_zaman);
}
$zaman1 = microzamani_hesapla ();
for ($i=0; $i<99999; $i++) {
$ar[] = $i;
}
$zaman2 = microzamani_hesapla ();
$fark = abs ($zaman2-$zaman1);
print "<BR> For Dongusu: $fark saniye icinde tamamlandi.n";
$i = 0;
unset ($ar);
$zaman1 = microzamani_hesapla ();
while ($i<99999) {
$ar[] = $i;
$i++;
}
$zaman2 = microzamani_hesapla ();
$fark = abs ($zaman2-$zaman1);
print "<BR>While Dongusu : $fark saniye icerisinde tamamlandi.n";
?>
http://www.turk-php.com/ornekler/bench_for_while.php
http://www.turk-php.com/ornekler/bench_for_while.phps
Tartisma : Yukaridaki ornekte ayni islemi gerceklestirmek
icin for ve while donguleri kullanilmaktadir.Bu
iki islem icin gecen sureler hesaplanmak ta ve karsilastirilmaktadir.
Bu cozum asagidaki sekilde kullanildiginda kendi programlarinizda
belirli bir islem icin gecen sureyi kullanicilariniza gosterme
firsatina sahip olacaksiniz:
<?php
$zaman1 = microzamani_hesapla ();
//Bundan sonraki kisimda istediginiz islevi yerine getiren
kendi kodlariniz yer aliyor.
$zaman2 = microzamani_hesapla ();
$fark = abs ($zaman2 - $zaman1);
Bu makalade kendi yazdigimiz microzamani_hesapla ()
fonksiyonunu kullandik.Bunun sebebi microtime () yapisal
hazir fonksiyonu'nun sonucu saniye ve milisaniye olarak (aralarinda
bir bosluk yer aliyor) string seklinde dondurmesi. Biz kendi
yazdigimiz fonksiyonda bu ham veriyi bir "sayi" veritipine
donusturduk hemde aralarindaki boslugu kaldirarak bu saniye
ve milisaniye sayilarini birbiri ile toplayip tek bir deger
elde ettik.
microtime () fonksiyonu saniye ve milisaniyeleri UNIX zamanini
( Daha cok bilinen adiyla "epoch saniyeleri" Ocak,1,1970 ten
o ana kadar gecen saniyeleri saymaktadir.) kullanmaktadir.
Daha gelismis cozumler
Bu karsilastirma ve gecen zamani hesaplama islemleri ile cok
fazla ilgileniyorsaniz PHP e-posta listesine gonderilen asagidaki
sinifi inceleyip,ozgurce kullanabilirsiniz.(Yayinci kisinin
kimligi bilinmiyor veya yazan kisi isimsiz kalmak istemis.)
http://www.turk-php.com/ornekler/benchmarking.class.phps
ornek bir kullanim gormek isterseniz,
http://www.turk-php.com/ornekler/benchmarking_ornek.phps
http://www.turk-php.com/ornekler/benchmarking_ornek_ciktisi.php
Not: PHP mail listesinde uzun aramalardan sonra burada adi
gecen kucuk "class" dosyasini kimin gonderdigini buldum hehe
:)
Ilgilenenler bakabilirler :
http://marc.theaimsgroup.com/?l=php-general&m=98285816806488&w=2
Serkan Hadi Ceylani
Kaynak : ISBN 0-672-31924-1
serkan@turk-php.com
|