SETLENGTH Komutunda döngü yavaşlaması
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- uğur alkan
- Üye
- Mesajlar: 227
- Kayıt: 29 Ağu 2004 04:49
- Konum: Istanbul
SETLENGTH Komutunda döngü yavaşlaması
SETLENGTH komutunu bir döngüde kullandığım zaman döngü bu komut olmadan bir saniye sürüyorsa kullandıktan sonra 10 saniye sürüyor.
sistemi acaba neden bu kadar yavaşlatıyor. Bunu çözmenin hızlandırmanın bir yolu varmı...? Dizi boyutunu daha önceden hesaplayamıyorum. hesaplayabilsem bu sorun ortadan kalkacak.
sistemi acaba neden bu kadar yavaşlatıyor. Bunu çözmenin hızlandırmanın bir yolu varmı...? Dizi boyutunu daha önceden hesaplayamıyorum. hesaplayabilsem bu sorun ortadan kalkacak.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
döngüyü görmek lazım aslında ancak dinamik boyutlu dizilerin boyutu belli diziler kadar hızlı olmasını beklemeyin.
genede kodunuzu yapıştırın tekrar bakalım.
genede kodunuzu yapıştırın tekrar bakalım.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- uğur alkan
- Üye
- Mesajlar: 227
- Kayıt: 29 Ağu 2004 04:49
- Konum: Istanbul
Kod: Tümünü seç
AssignFile(Dosya, DosyaAdi);
{$I-}
Reset(Dosya);
if IOResult = 0 then
i:=0;
while not EOF(Dosya) do
begin
ReadLn(Dosya, Satir);
Satir:=Satir+' ';
i:=i+1;
k:=i;
setlength(SATIRIM,i);
SATIRIM[i-1]:=satir;
end;
Kod: Tümünü seç
PROCEDURE CAPRAZ_B();
var
X1,X2,X3,X4,X5,X6,X7:EXTENDED;
V1,V2,V3,V4,V5,V6,V7:INTEGER;
K:INTEGER;
BEGIN
DIZI_BOYU:=0;
M1:=557.77;
ST();
X1:=M1/(form1.spSkinSpinEdit1.Value);//---------ÇİZGİLER ARASI MESAFE
X2:=form1.SpinEdit2.Value; //------------ALINACAK_YOL
X3:=form1.SpinEdit3.Value; //------------X MOTOR YOL
//-------------------------------------------------KOD OLUŞTURULUYOR
FOR K:=1 TO round(form1.SpinEdit1.Value) DO
BEGIN
PASO_GIR();
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X'+floatTOSTR(form1.SpinEdit3.Value)+'.'+' '+'Y'+FLOATTOSTR((X2)+(K*X1));
PASO_CIK();
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X0.'+' '+'Y'+FLOATTOSTR((K*X1));
END;
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X'+FLOATTOSTR((X3+1))+' '+'Y.0';
FOR K:=1 TO round(form1.SpinEdit1.Value) DO
BEGIN
PASO_GIR();
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X0.'+' '+'Y'+FLOATTOSTR((X2)+(K*X1));
PASO_CIK();
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X'+FLOATTOSTR((X3+1))+' '+'Y'+FLOATTOSTR((K*X1));
END;
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='G0 Z100.';
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='X0. Y0.';
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='M2';
SETLENGTH(SATIR,DIZI_BOYU);
DIZI_BOYU:=DIZI_BOYU+1;
SETLENGTH(SATIR,DIZI_BOYU);
SATIR[DIZI_BOYU-1]:='%';
END;
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
ya vakit dar yada ben uykususuzum koddan bişey anlamadım. anlamadım derken bazı değişkenlerin tipi yok vede ilk blokta hiç açıklama olmayınca neyi neden yapıyorsunuz anlamadım.
ancak aklıma birşey geldi onuda açık edip denemiş olalım. normalde delphi string uzunluğu 0. byte içinde char olarak tutar...
yani siz
a adlı string için
a[0]:=#65 derseniz bu string 65 uzunluğuna gelmiş olur. ancak değişkenler hafızada ardarda geldiği için kodun sağplam sonuç üretme kısmını denemek lazım.
ancak aklıma birşey geldi onuda açık edip denemiş olalım. normalde delphi string uzunluğu 0. byte içinde char olarak tutar...
yani siz
a adlı string için
a[0]:=#65 derseniz bu string 65 uzunluğuna gelmiş olur. ancak değişkenler hafızada ardarda geldiği için kodun sağplam sonuç üretme kısmını denemek lazım.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
dr bob sana benzer bir iş yapmış ordada not sana cevap gibi..
// very inefficient... diyor amcamız
var
X: Array of String;
i: Integer;
begin
while not eof do
begin
SetLength(X,Length(X)+1); // very inefficient...
readln(X[High(X)])
end;
for i:=0 to High(X) do writeln(X)
end.
// very inefficient... diyor amcamız
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- uğur alkan
- Üye
- Mesajlar: 227
- Kayıt: 29 Ağu 2004 04:49
- Konum: Istanbul
Kod: Tümünü seç
AssignFile(Dosya, DosyaAdi);
{$I-}
Reset(Dosya);
if IOResult = 0 then
i:=0;
while not EOF(Dosya) do
begin
ReadLn(Dosya, Satir);
Satir:=Satir+' ';
i:=i+1;
k:=i;
setlength(SATIRIM,i);
SATIRIM[i-1]:=satir;
end;
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Kodlara bakınca Pascal'dan delphiye geçişiniz taze denilebilir.
. Bunun yerine aşağıdaki kodu incelemenizi tavsiye ederim.Gibi bir kodla dosyadaki satırlar bir çırpıda diziye atılabilir. Hatta diziye atılmasına gerek kalmadan da Liste nesnesinden kullanılabilir. Artık DiziDoldur('c:\xyz\Dosya.adi') prosedürü ile belirttiğimiz dosya hem Dizi'de hem de Liste'de olacak. Kolay gelsin.

Kod: Tümünü seç
var Dizi:array of String;
Liste:TStrings;
.
.
.
procedure DiziDoldur(const DosyaAdi:String);
var i:Integer;
begin
Liste.LoadFromFile(DosyaAdi);
SetLength(Dizi,Liste.Count);
for i:=0 to Liste.Count-1 do Dizi[i]:=Liste[i];
end;
.
.
.
initialization
Liste:=TStringList.Create;
finalization
Liste.Free;
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- uğur alkan
- Üye
- Mesajlar: 227
- Kayıt: 29 Ağu 2004 04:49
- Konum: Istanbul