1 Milyon işlemde Out of Memory hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

1 Milyon işlemde Out of Memory hatası

Mesaj gönderen sunye »

Öncelikle herkese kolay gelsin,

Benin yaşamış olduğum sorun şu şekildedir, yardımlarınız için şimdiden teşekkür ederim.

Kullanılan Bileşenler : Edit ve StringGrid. (Delphi 7)

BaslangicNo = 600 000 100 000
BasilacakKart = 1 000 000

SeriNo Kısmı BaslangicNo + 1 olarak 1 milyon kere artacak
Sifre ise 12 Basamaklı olup 1. basamak sabit "6"dır.

Aşağıdaki procedure'yi çalıştırdığımda "out of memory" hatası alıyorum bu sorunun önüne nasıl geçebilirim?

var
i : longint;
x, y : int64;
SeriNo : int64;
Sat : int64;
S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11 : String;
begin
Randomize;
x:=strtoint64(baslangicno.Text);
y:=strtoint64(basilacakkart.Text);
Serino:=strtoint64(baslangicno.Text);
Sat:=1;
Liste.RowCount:=strtoint64(basilacakkart.Text)+1;
for i:=x to x+y do begin
SeriNo:=SeriNo + 1;
Liste.Cells[1,Sat]:=inttostr(SeriNo);
S1:=inttostr(Random(9));
S2:=inttostr(Random(9));
S3:=inttostr(Random(9));
S4:=inttostr(Random(9));
S5:=inttostr(Random(9));
S6:=inttostr(Random(9));
S7:=inttostr(Random(9));
S8:=inttostr(Random(9));
S9:=inttostr(Random(9));
S10:=inttostr(Random(9));
S11:=inttostr(Random(9));
Liste.Cells[2,Sat]:='6' + S1 + S2 + S3 + S4 + S5 + S6 + S7 + S8 + S9 + S10 + S11;
Sat:=Sat+1;
end;
Bildiğim tek şey, hiç bir şey bilmediğim.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen mkysoft »

büyük ihtimalle rowcount özelliği sınırlı ve tinyint gibi bir rakam, integer sınırlarınız aşıyor olabilir. aşmasa bile o kadar veriyi string grid yönetemez. Ekranda sadece gerekli olan verileri göstermeye çalışın.
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen sunye »

Cevabınız için teşekkür ederim ama bütün verileri listelemesi gerekiyor çünkü sayıların aynı olup olmadığı kontrol edilmesi gerekli ki ayrıca 1 milyon zaten sadeleştirilmiş haliydi :)

Şimdilik sorunu şöyle çözdüm. Bütün verileri DB ye girip ordan tek tek kontrol ediyorum ki yaklaşık 18 saate 2,5 milyon kayıt işleyebildim bu süreyi hızlandırmak için fikir bekliyorum :)
Bildiğim tek şey, hiç bir şey bilmediğim.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen conari »

Veritabanı nedir?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen mkysoft »

verileri string grid'e değil, array'lara yükleyiniz.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen Lost Soul »

sunye yazdı:yaklaşık 18 saate 2,5 milyon kayıt işleyebildim bu süreyi hızlandırmak için fikir bekliyorum :)
ARRAY kullanmak istemiyorsanız.
dbye aktardığınız tabloda aktarmaya baişlamadan önce

AktaranDataset.DisableControls;
yazın
işiniz bittiğinde de
AktarimDataset.EnableControls;
yazın
hızı feci şekilde artacaktır :)

bir de veritabanınız da transaction olayı var iste.
Aktarmaya başlamadan Transactionu başlatın ve Her 1000 işlemde bir ya da tüm işlemler bittiğinde (birincisini tavsiye ederim) Transactionu commit edin. (AktarimDataset.Transaction.CommitRetaining);
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Re: 1 Milyon işlemde Out of Memory hatası

Mesaj gönderen sunye »

Sorunuma çözüm bulmaya çalışan arkadaşlara yardımlarından teşekkür ederim. Her hangibir Database kullanmıyorum sonuçları doğrudan text dosya olarak kaydediyorum.
@mkysoft verdiğin cevap işimi gördü teşekkür ederim;

Programın diğer zamanlarda da aynı seriyi üretmemesi için DB kullanmak üzere modifiye ediyorum. Ancak her ay gelecek olan 5 milyon kayıt sonrası nasıl bi yavaşlama olur bilmiyorum :)
Bildiğim tek şey, hiç bir şey bilmediğim.
Cevapla