Alıntı (zekeriyadurmus):
> Yazdığınız büyük boyutlu dosyalarda çok zaman alıyor
(Benimkindeki 10 gibi küçük bir değer kullanmadığını varsayıyorum.) Neden zaman alıyor acaba? Paketlerin gidip gelmeleri için beklendiği (latency) için mi?
Parçalar halinde gönderildiğinde aslında koşutluktan bile yararlanılabilir. Dosyanın parçaları tek iş parçacığı tarafından okunur ve gönderici iş parçacıklarına verilir. Yanıtlar iş parçacıkları tarafından bekleneceğinden teoride dosya internet üzerinde aynı anda birden fazla parçasıyla gitmiş olur.
Ama o yanıltıcı bir düşünce oluyor çünkü yine de şunlarla kısıtlıyız:
-
dosyadan okuma yine de koşut değil
-
sunucunun internet bağlantısı belirli bir genişliğe sahip
-
istemcinin yazması da koşut değil
Başka bir nedeni de benim sabit uzunluklu dizi kullanmam olabilir mi acaba? Onlar değer türü olduklarından işlevlere gönderilirken kopyalanırlar. Dilim ile de deneyebilirsin:
ubyte[] x;
x.length = 1000;
Veya:
auto x = new ubyte[](1000);
Ama bu noktada bunlar tahmin...
Alıntı:
> web serverde kullanacağım için hızlı olması lazım.
vibe.d'yi düşündün mü? Ben daha hiç oynamadım ama şu olanak işine yarayabilir:
http://vibed.org/api/vibe.http.fileserver/
Alıntı:
> Diğer dediğiniz yöntem için bir örnek yazabilir misiniz?
Yani, std.stdio.File'ı kullanmak... Daha önce şöyle bir örnek yazılmış:
import std.stdio;
void yaz(File dosya, size_t adet)
{
foreach (i; 0 .. adet) {
immutable bayt = cast(ubyte)i;
dosya.rawWrite([ bayt ]);
}
}
void oku(File dosya, size_t adet)
{
auto okunan = new ubyte[](adet);
dosya.rawRead(okunan);
foreach (ubyte bayt; okunan) {
writefln("%02x", bayt);
}
}
void main()
{
auto dosya = File("rawWrite_denemesi", "w+");
yaz(dosya, 100);
dosya.rewind();
oku(dosya, 100);
}
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]