November 28, 2012

Hatanın ne olduğunu yazmadığı için söyleyemiyorum :D
Evet gösterdiğiniz 3 programdan bahsediyorum. Write yapıyor ama diğer 2 okuma işlemi yapılmıyor. 1 2 3 4 5 6 7 falan yazıyor sonra program hata verip kapanıyor.

Hatada "Unhandled exception at 0x7480C41F (KernelBase.dll) in ConsoleApp3.exe: 0xE0440001 (parameters: 0x00427450)." yazıyor ama bende hata çıktığında hep bu hatayı veriyor zaten açıklaması çıkmıyor :D

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

November 28, 2012

cmd üzerinden exeyi çalıştırınca hatayı verdi.
"core.exception.OutOfMemoryError"

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

November 27, 2012

Alıntı (zekeriyadurmus):

>

2.kez bir dosya okumak istiyorum okumadan hata veriyor program çünkü önceki okuduğunu ramdan silemiyor.

Önceki dosyanın hâlâ yaşamakta olduğundan şüpheleniyorum ama gösterdiğin küçük programda tek dosya vardı. Belirli bir anda iki dosya da yaşıyor mu? Örneğin ikisine eriştiren sınıf değişkenleri hâlâ etkinler mi?

Alıntı:

>

ve 1024 bytelık olarak parçalarsak aşır derecede yavaş gider 1048576 tane yanıt gönderilmesi demek ki bu oldukça uzun sürmesine neden olur.

Kabul. Her seferde on milyon bayt göndersek nasıl olur? Denemek gerek.

Alıntı:

>

Hafızaya yüklemeden direkt olarak dosya göndermenin

Benim bildiğim yok. Özel bir donanım yardımı olmadığı sürece bilgisayardaki bütün işlemlerin bellekte yapılması gerekir.

Alıntı:

>

veya read ile okuduğumuz birşeyi hafızadan silmenin bir yolu var mı?

Artık kullanılmayan nesnenin yer tutmaması gerekir. Otomatik olmalı. Sınıf değişkenlerinin programında nasıl olduklarını görmek gerek.

Ali

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

November 28, 2012

Alıntı:

>

Emin olmak için tekrar soruyorum: Ben üç program gösterdim. Birincisini tek başına çalıştırım dosyayı oluşturdun. Ondan sonra ikinci programı tek başına çalıştırdığında core.exception.OutOfMemoryError hatası atıldı, değil mi?

evet.

Alıntı:

>

Hangi derleyici ve sürümü ne?

Digital mars d compiler 2.060

Alıntı:

>

Tam olarak hangi seçeneklerle derledin?

Açıkcası bilmiyorum visual studio nun start komutunu vererek derliyorum. Debug veya Release fark etmiyor ikisinde aynı şekilde hata veriyor.

Alıntı:

>

Hangi Windows işletim sistemi?

Windows 7 sp1 home premium 64 bit

Teşekkür ederim.

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

November 27, 2012

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. ]

November 28, 2012

Az önce, Fedora64 Virtual Machine ile denediğimde çok yavaş çalıştı. Kaynaklar bir oyunu çalıştıracak kadar müsrüfçe verilmesine karşın 1 GB. dosya oluşumu uzun sürdü. Neyse ki teste geçtim ama gel gör ki hafıza sürekli artış eğilimindeydi. Sayaç 10'lara vardığında 1 GB. bellek aşılmıştı.

Ekran görüntüsü şöyle:

'Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\Test>cd\DMD

C:\DMD>path c:\DMD\windows\bin

C:\DMD>dmd
DMD32 D Compiler v2.060
Copyright (c) 1999-2012 by Digital Mars written by Walter Bright

C:\DMD>dmd create.d

C:\DMD>create

C:\DMD>dmd single.d

C:\DMD>single
0
1
2
3
4
5
6
7
8
9
^C
C:\DMD>dmd partial.d

C:\DMD>partial
0
1
2
3
4
5
6
7
8
^C
C:\DMD>'

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

November 28, 2012

Alıntı (zekeriyadurmus):

>

1 gblık dosya oluştuktan sonra okumaya geçince program hata verdi

Benim gösterdiğim üç programdan mı bahsediyoruz? Yani, dosyayı birinci programla oluşturdun ve kapattın. Ondan sonra ikinci programa geçerek okumaya başlladın. Programlar her seferde yüz megabayt okudukları halde bellek gittikçe şişti.

"hata verdi" diyorsun ama ne olduğunu söylemiyorsun. :( Ben hatanın ne olduğunu çok merak ediyorum.

Alıntı:

>

Acaba visual studio yüzünden mi hata veriyor.

O sorunun yanıtı kolay: Programı bir kere de Visual Studio içinde başlatma; komut satırından veya üzerine çift tıklayarak başlat. Aynı durum devam ediyorsa Visual Studio'dan değil demektir.

Alıntı:

>

D için doğru dürüst editör bulamadım ben de mecburen vs yi kullanıyorum şuan.

Önerebileceğiniz editör var mı?

Ben Emacs kullanıyorum. Bilinenler şunlar:

http://prowiki.org/wiki4d/wiki.cgi?EditorSupport

Ali

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

November 28, 2012

Bu hatayı mutlaka bildirelim; düzeltilsin. Lütfen şunları bildirir misin:

  • Emin olmak için tekrar soruyorum: Ben üç program gösterdim. Birincisini tek başına çalıştırım dosyayı oluşturdun. Ondan sonra ikinci programı tek başına çalıştırdığında core.exception.OutOfMemoryError hatası atıldı, değil mi?

  • Hangi derleyici ve sürümü ne?

  • Tam olarak hangi seçeneklerle derledin?

  • Hangi Windows işletim sistemi?

Windows kullanan diğer arkadaşlar, aynı durum sizde de var mı?

Çok teşekkürler.

Ali

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

November 28, 2012

Bunu her iki işletim sisteminde de denedim. Tabi W$ sanal idi ama Linux'da da ilginç bir şey dikkatimi çekti. Dilerseniz önce onu nakledeyim; dilemezseniz 3. paragrafa atlayın! Demokrasi var...:)

  • Linux'da partial.d içine, sadece core.memory modülünü ve dosya.read(veri) altına da GC.free(veri.ptr)'yi ekledim. Zaten Linux'da bir sorun yoktu ve yine sorunsuz çalıştı ama önceden ~100 MB.'lık bellek bölgesi ayrılırken şimdi ~200 MB. ayrılmaya başladı. Buradan, OS'un veya GC'nin bir şeyleri yedeklediği sonucunu çıkarıyorum. Ama dikkat Linux'da!

  • Windows'da ise yukarıda bahsedilenler sorunu kökünden çözmüşe benziyor ama Linux'daki iki kat bellek ayrımı sorunu meydana gelmiyor. Belki de Linux'da GC.free() olayını zaten runtime yaptığı için bunu ikinci kez ve gereksizce yapmak kaynakları müsrifce kullanmamıza sebep olmuş olabilir. Yine de Windows'da da bunu otomatik yapması beklenirdi...

Sizce neden yapmamış olabilir? Böyle bir şey W$ gibi bir bellek canavarı için gerekmez mi...:)

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

November 28, 2012

Hatayı bildirdim:

http://d.puremagic.com/issues/show_bug.cgi?id=9094

Ali

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