AS3 - Number vs uint vs int
Yağız Gürgül Tarih: 9/05/2008 Yorum: 7 adet
Okunma : 843 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…
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.
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.
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.
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
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
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.
Haber
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.
Etkinlikler
Fuar
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor
Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 286 (2 kayıtlı, 284 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız






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