makale ekle!
Profili Göster

AS3 - Number vs uint vs int

Yağız Gürgül Tarih: 9/05/2008 Yorum: 7 adet

Okunma : 5113 Tutanlar: Bu yazıyı 1 kişi tuttu.

AS3'ün gelmesiyle yeni gelen int ve uint hakkında bir çok makale yazıldı.Ben daha önceki makalemde bu yeni gelen sınıfları tanıtmıştım.

Şimdi ise tüm bu üç sınıfın performanslarını inceliyeceğiz. Bunun için ufak bir döngüye ihtiyacımız var. Zaten hemen hemen tüm Flash çalışmalarımızda döngü kullanırız.Ama performans testi için döngü liminiti biraz abartıcaz :)

Test için elimizde önemli olan iki değişken var.Bir tanesi döngüyü sağlayan değişken.Diğeri ise döngü içinde matematiksel işlemi sağlayacak değişken. Bu iki değişken acaba hangi tiplerde (Number, uint, int) daha performanslı olur diye bakıcaz.

Ben test için şöyle bir kod yazdım:


//public var: ////////////////////////////////////////////////////////////
var i:int =0;
var c:int =0;
//private var: ///////////////////////////////////////////////////////////
var t:int =0;
var s:int =0;
var a:int =0;
var loop_:int=5;
var z:Timer = new Timer(100,loop_);
z.addEventListener(TimerEvent.TIMER,loop);
z.addEventListener(TimerEvent.TIMER_COMPLETE,loop_f);
////////////////////////////////////////////////////////////
function loop(e:Event) {
    t=getTimer();
    for (i=0; i<10000000; i++) {
        c=(1*6)/3;
    }
    a=getTimer()-t
    ;
    s+=a;
    trace("Sonuç MS: "+String(a));
}
////////////////////////////////////////////////////////////
function loop_f(e:Event) {
    trace("Ortalama MS: "+String(s/loop_));
}
z.start();
////////////////////////////////////////////////////////////

Bu kodu direk AS3 belgenizin ilk karesine kopyalayıp test edin.Benim bilgisayarımda, output ekranında:


Sonuç MS: 261
Sonuç MS: 265
Sonuç MS: 269
Sonuç MS: 302
Sonuç MS: 263
Ortalama MS: 272

Değerleri gözüküyor.Peki bu ne demek? Kodumuz Flash'a toplam beş tane döngü yaptırıyor.Her döngü sonunda, döngüyü kaç milisaniyede işlediğini buluyor.Son olarakta bu beş sonucun ortalamasını alıyor. İsterseniz siz loop_ değişkeninin değerini değiştirerek deney sayısını arttırabilirsiniz.

Demin dediğim gibi bizim için önemli olan iki değişken.Bunlar kodlarımızda c ve i'dir. Bunları tek tek int, uint ve Number yaparak test edicez.

Elimizde şöyle bir tablo var:


Loop(i)   İşlem(c)
 i          i      :
 i          u      :
 i          n      :

 n          n      :
 n          i      :
 n          u      :

 u          u      :
 u          i      :
 u          n      :

i=int
u=uint
n=Number

Bu tabloya göre tek tek, i değişkenini int uint ve Number, c değişkenini de int, uint ve Number yaparak denicez.

Kendi bilgisayarımda sonuçlar şu şekilde:


Loop(i)   İşlem(c)
 i          i      : 276.0
 i          u      : 271.4
 i          n      : 192.6

 n          n      : 149.2
 n          i      : 316.2
 n          u      : 316.0

 u          u      : 762.3
 u          i      : 764.0
 u          n      : 567.0

Sonuç sayısı ne kadar büyükse performans okadar düşük demektir.Buna göre baktığınızda uint'in ne kadar yavaş olduğunu görebilirsiniz :) Tabloya bakarsak en performanslı sınıf Number gibi gözüküyor. Bunun nedeni int ve uint sınıflarının matematiksel işlemlerde Number sınıfına dönüşmesidir.

Yani kodlarımızdaki şu satırı silersek: c=(1*6)/3;

Ve i değişkenin tipini int yaparsak, int sınıfının çok daha performanslı olduğunu görebiliriz. :)

Şu noktada int sınıfının söylendiği kadar performanslı olmadığını anlayabiliriz.En azından matematiksel işlemlerde :)

Kolay gelsin...

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
palax1 9/05/2008

selam ilginç bir tespit .. bu kodları aynı zamanda her hangi bir pc nin işlemcisi testi içinde kullanabilir mi acaba?

Profili Göster
Yağız Gürgül 9/05/2008

Evet palax1 yapılabilir.Ama öyle bir şey için çok fazla deney yapılmalı.Mesela ben Flash üzerinde bu testleri yaparken birsinin MSN'den mesaj atması bile sonuçları etkileyebiliyor :)

Dışarıdan etkilere kapalı bir şekilde test etmek lazım.

Profili Göster
palax1 10/05/2008

bence bilgisayardaki çalışan tüm programları kapatıp test yapılabilir.çünkü bu tip dos komutu ile(asal sayıları bulma)yapılmış test çalışması mevcut.

Profili Göster
Veli Süngütay 11/05/2008

yagiz cok iyi bir calisma. Bu tur performans testleri uzun suredir yapilmakta flash 9 ciktigindan bu yana. Ilginc sonuclar aliyoruz. Number, int karsilastirmasinda olduğu gibi. Bir baska cok ilginc hususta, static class larin, classlardan bir hayli yavas calismasi. Boyle bir testte istersen gerceklestir, bir bakalim.

Profili Göster
Engin Yöyen 13/07/2008

Merhaba, öncelikle testin güzel bir fikir. Test için eklemek istediğim bir kaç şey var. "uint" ve "int" veri türünün Number veri türünden hızlı olmasının sebebi bunların 32 bit veri olmasıdır. Number ise 64 bir veri değerine sahiptir.

Testin hakkında ise bir kaç şeyi göz ardı etmişsin, onlardan ilki test için yapılan zamanlama hatası. Tİmer objesinin genel bir zamanlama sorunu bu senin testini birebir etkiler ve her bilgisayarda farklı sonuçlar çıkarabilir. Yani flash player in timer objesini tetikleme ve hesaplama süresi oradaki büyük rakamdan dolayı ciddi bir şekilde gecikir. Testingde görsel bir uygulama yok, ama derleyici büyük bir sayı ile karşı karşıya kaldığında timer objesini %2 ile %60 arasında bir geciktirmeye ugratır.

İkinci konu ise testini flash içerisinde gerçekleştirmişsin, yani trace komutu ile kodun çıktısını almışsın. Normal şekilde swfyi test ettiğinde flash içerisinde olduğundan daha hızlı cevap verecektir. Yani swf dosyasını kaydedin, verileri sahnedeki bir metne yazdırmak, aynı bilgisayar da dahi dahi iyi sonuçlar vericektir.

Test için teşekkür ederim. Bende bu tarz testler yapıyorum, hız ve zamanlama konusu sonuçta önemli bir konu. Tabii bu testler bilgisayar performansına göre değişiyor, o yüzden bence testti bulabildiğin en eski bilgisayar da yapman sana geliştirici olarak en azından kodlama yaparken neyi yapıp yapmayacağını belirlemede yardımcı olur.

Tekrar teşekkürler Kolay gelsin

Profili Göster
Engin Yöyen 13/07/2008

Bu arada test için bir kaç sayısal değer vermek istiyorum, yani "uint nedir?", "int nedir?" gibi soruların cevaplarının bulanmasına yardımcı olur.

Number (Say)

int (Tamsayı-integer)

uint (Belirsiz(Pozitif) Tamsayı-unsigned integer)

Number (Sayı)

Saklama kapasitesi : 64 Bit

Minimum Değer : -4.940656458412467e-324

Maksimum Değer : 1.79769313486231e+308

int(Tamsayı-integer)

Saklama kapasitesi : 32 Bit

Minimum Değer : -2,147,483,648

Maksimum Değer : 2,147,483,647

uint (Belirsiz(Pozitif) Tamsayı-unsigned integer)

Saklama kapasitesi : 32 Bit

Minimum Değer : 0

Maksimum Değer : 4,294,967,295

Kolay Gelsin

Profili Göster
Aytekin Meral 13/08/2008

Bu performans testlerinin dayandığı nokta çok önemli bence. Eğer siz toplama çıkarma bölme mod alma vs. gibi işlemler yapıyorsanız ve değişken tipiniz int veya uint ise Flash player bunları Number'a çevirip işlem sona erdikten sonra tekrar uint veya int'e çevirecektir. ama enteresan bir şekilde Number i++, int i++'dan daha yavaş işleniyor. Ama şöyle de bir fikir birliği var sanırım, int genellikle loop'larda, Number genel matematiksel işlemlerde ve uint ise genel color işlemlerinde kullanılıyor.

yeni üyelik | şifremi unuttum

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 62 (50 kayıtlı, 12 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

...

Blog Bölümü Blogevi.com'a Taşınıyor

Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...

7.500'üncü üyemiz Cem Koç!

Neler Yapılabilir?

500 Hatası Hakkında!

Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)

coldfusion mysql ubuntu
 
sponsor adobe istanbul