Bir deneme yaptım. Önce yaklaşık 1Gb'lık bir dosya oluşturdum:
import std.stdio;
void foo()
{
auto dosya = File("bir_gigabayt_dosya", "w");
auto veri = new ubyte[](100 * 1024 * 1024);
foreach (i; 0 .. 10) {
dosya.rawWrite(veri);
}
}
void main()
{
foo();
}
Sonra o dosyayı sürekli olarak açıp onar parça halinde okudum:
import std.stdio;
void foo()
{
auto dosya = File("bir_gigabayt_dosya", "r");
auto veri = new ubyte[](100 * 1024 * 1024);
foreach (i; 0 .. 10) {
dosya.rawRead(veri);
}
}
void main()
{
for (size_t i; true; ++i) {
writeln(i);
foo();
}
}
BufferedFile'dan şüphelendiğim için bir de onunla denedim:
import std.stdio;
import std.stream;
void foo()
{
Stream dosya = new BufferedFile("bir_gigabayt_dosya");
auto veri = new ubyte[](100 * 1024 * 1024);
foreach (i; 0 .. 10) {
dosya.read(veri);
}
}
void main()
{
for (size_t i; true; ++i) {
writeln(i);
foo();
}
}
İki yöntem de sorunsuz çalıştı. Programın kullandığı bellek sabit kaldı. Öyle olmasını da beklerdim çünkü bütün işlemler foo() işlevinde halledilip bittikçe oradaki değişkenlerin yaşamları sona erdi. Onların yerleri daha sonradan otomatik olarak tekrar kullanıldı.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]