February 12, 2013

Çok güzel! :)

Ama bir şey dikkatimi çekti: Önce dosyanın tamamını okuyorsun, sonra tembel olarak kodlanacak olan baytları .array ile önce hevesli olarak bellekte bir diziye dönüştürüyorsun ve ancak ondan sonra yazıyorsun.

Özellikle dosya büyük olduğunda fark getireceğini düşündüğüm için bir de dosyayı parça parça okumayla karşılaştırdım. Ama bu iş için yalnızca TEST1'de kullandığın base32()'yi kullandım.

Senin kullandığın dosyanın aynısı değil ama sistemimde bulduğum 218Mb'lık başka bir dosya kullandım.

TEST1 dosya sisteminin ara belleklerinin filan durumuna bağlı olarak 9-23 saniye arasında sonuçlar elde ettim.

Sonra dosyayı parça parça okuyan şu programla karşılaştırdım:

void main() {
 auto inFile = File("deneme.bin", "r");
 auto outFile = File("hs-2003-28-a-full_tif.b32", "w");

 auto ch = std.stdio.chunks(inFile, 500);

 foreach (ubyte[] c; ch) {
     outFile.write(base32(c));
 }

Süre 7-9 saniye arasına indi.

Bir de parallelism'e bakmak istedim ama ne yazık ki std.stdio.chunks bir InputRange değilmiş. O işi daha sonraya bırakalım. :) Bu problem koşut programlamaya çok yatkın çünkü uzunlukları 5'in katı olduğu sürece parçalar aynı anda işlenebilir.

Dosyayı parça parça okumak uzun dosyalarda daha büyük yarar sağlayacağından bir de 484Mb'lık bir dosyayla denedim.

Üç kere TEST1: 56-80 saniye arası. (Sistem kullanılamayacak kadar yavaşladı.) (Dakikalar sonra bile çok yavaştı.)

Üç kere art arda parça parça okuma: 16-23 saniye arası. (Sistemde hiç yavaşlık hissedilmedi. :))

TEST2'yi de benzer biçimde değiştirebiliriz. O da aynı oranda hızlanacaktır.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2 3
Next ›   Last »