Mutlaka Okuyun! -> Kodunuzu Hızlandırmak İçin İpuçları
--------------------------------------------------------------------------------
Kodunuzu hızlandıracak öneriler, hepsi denenmiştir,
şüpheniz varsa siz de deneyin.....
Lafı fazla uzatmadan direk olaya giriyorum..
Aşağıdakilerin hepsi denenmiştir ve performans arttırdığı
mutlaktır, bana güvenin. İsterseniz kendiniz de
deneyebilirsiniz..
 
1) Değişken Tanımlama:

Değişken tanımlarken hiçbir değişkeni mümkün olduğu
sürece Variant halde bırakmayın ! Yani;
Dim x, y, z

diyerek kestirip atmayın. Variant tanımlar bellekte daha fazla yer tutar ve işlemleri yavaşlatır, her zaman explicit olun
Dim x as String, y as Integer, z as Long
 
2) String fonksiyonlarına dikkat edin!
Burada da anlatmak istediğim fonksiyonun döndürdüğü tiple ilgili. Mesela Str ile Str$, Mid ile Mid$, Left-Left$, Right-Right$ aynı şeyler değil.. Örnekler çoğaltılabilir. Mid'i alırsak Mid ile döndürülen değer Variant'tır, eğer string tarzı bir şey istiyorsanız Mid$ kullanın !
3) For Next Döngülerine Dikkat
Fox x = 1 to 100000
y = y + 1
'....
'....
Next x
Burada Next x kullandık, x döngüsünün sonlandığını belirtmek için.. Ancak yalnızca Next kullanmak büyük bir performans kazancı sağlayacaktır!! İsterseniz deneyin
4) While Not Eof(DosyaNo)
'....
Wend
Sıralı Okuma veya bir Recordset'ten okuma yaparken yukarıdaki gibi bir uygulamayı kullanırız. Ancak burada dikkat edilmesi gereken şey döngü her tur attığında dosya sonuna gelip gelmediğini kontrol etmek zorunda kalıyor. Bu da performans kaybına neden oluyor. Çözümü çok basit, Recordset'te veya dosyada kaç satır, kaç kayıt olduğunu öğrenin ve buna göre mesela

For Dongu = 1 to KayitSayisi
'....
Next
tarzı bir döngü kullanın.
5) Sayısal veri tipleri arasında işlemlerin en hızlı yapıldığı veri türü Long'dur, çünkü her şeyiniz 32bit, long'da! Deneyin, geyik değil..
6) UzunDeğişkenİsimleriİşlemleriYavaşlatır = MümkünOlduğunca Kısa değişken isimleri kullanın. Vb 256 karaktere kadar değişken tanımlamaya izin veriyor olması lazım ama bence siz kritik döngülerde olabildiğince kısa değişken isimleri kullanın.
8) String işlemi yapmak istiyorsunuz, örneğin..:

DosyaIcerik = DosyaIcerik + Okunan
Şeklinde bir geyik yapmayın sakın, her seferinde bellek açmaya kastırmayın. Büyük döngülerde ölümcül yavaşlıklar ortaya çıkar.. İlk önce dosyaicerik'e bir buffer verin. Yani
DosyaIcerik = Space$(2500)
Daha sonra bu buffer'ı Mid$ fonksiyonuyla doldurun.
Mid$(DosyaIcerik, 200, 500) = OkunanBolum..
9) Bir işi Api ile yapabiliyorsanız başka yol kullanmayın, kritik görevlerde Api kullanmaya özen gösterin.
 
Şu an için bi hevesle aklıma gelenler bunlar, bu ilk dokümanım, bilmiyorum foruma nasıl yansır.. Aklıma geldikçe ve olumlu eleştiriler alırsam devam ederim.. Hadi hayırlı olsun.
Ozan Yasin Doğan
Mutlaka Okuyun! -> Kodunuzu Hızlandırmak İçin İpuçları
--------------------------------------------------------------------------------
Kodunuzu hızlandıracak öneriler, hepsi denenmiştir,
şüpheniz varsa siz de deneyin.....
Lafı fazla uzatmadan direk olaya giriyorum..
Aşağıdakilerin hepsi denenmiştir ve performans arttırdığı
mutlaktır, bana güvenin. İsterseniz kendiniz de
deneyebilirsiniz..
 
1) Değişken Tanımlama:

Değişken tanımlarken hiçbir değişkeni mümkün olduğu
sürece Variant halde bırakmayın ! Yani;
Dim x, y, z

diyerek kestirip atmayın. Variant tanımlar bellekte daha fazla yer tutar ve işlemleri yavaşlatır, her zaman explicit olun
Dim x as String, y as Integer, z as Long
 
2) String fonksiyonlarına dikkat edin!
Burada da anlatmak istediğim fonksiyonun döndürdüğü tiple ilgili. Mesela Str ile Str$, Mid ile Mid$, Left-Left$, Right-Right$ aynı şeyler değil.. Örnekler çoğaltılabilir. Mid'i alırsak Mid ile döndürülen değer Variant'tır, eğer string tarzı bir şey istiyorsanız Mid$ kullanın !
3) For Next Döngülerine Dikkat
Fox x = 1 to 100000
y = y + 1
'....
'....
Next x
Burada Next x kullandık, x döngüsünün sonlandığını belirtmek için.. Ancak yalnızca Next kullanmak büyük bir performans kazancı sağlayacaktır!! İsterseniz deneyin
4) While Not Eof(DosyaNo)
'....
Wend
Sıralı Okuma veya bir Recordset'ten okuma yaparken yukarıdaki gibi bir uygulamayı kullanırız. Ancak burada dikkat edilmesi gereken şey döngü her tur attığında dosya sonuna gelip gelmediğini kontrol etmek zorunda kalıyor. Bu da performans kaybına neden oluyor. Çözümü çok basit, Recordset'te veya dosyada kaç satır, kaç kayıt olduğunu öğrenin ve buna göre mesela

For Dongu = 1 to KayitSayisi
'....
Next
tarzı bir döngü kullanın.
5) Sayısal veri tipleri arasında işlemlerin en hızlı yapıldığı veri türü Long'dur, çünkü her şeyiniz 32bit, long'da! Deneyin, geyik değil..
6) UzunDeğişkenİsimleriİşlemleriYavaşlatır = MümkünOlduğunca Kısa değişken isimleri kullanın. Vb 256 karaktere kadar değişken tanımlamaya izin veriyor olması lazım ama bence siz kritik döngülerde olabildiğince kısa değişken isimleri kullanın.
8) String işlemi yapmak istiyorsunuz, örneğin..:

DosyaIcerik = DosyaIcerik + Okunan
Şeklinde bir geyik yapmayın sakın, her seferinde bellek açmaya kastırmayın. Büyük döngülerde ölümcül yavaşlıklar ortaya çıkar.. İlk önce dosyaicerik'e bir buffer verin. Yani
DosyaIcerik = Space$(2500)
Daha sonra bu buffer'ı Mid$ fonksiyonuyla doldurun.
Mid$(DosyaIcerik, 200, 500) = OkunanBolum..
9) Bir işi Api ile yapabiliyorsanız başka yol kullanmayın, kritik görevlerde Api kullanmaya özen gösterin.
 
Şu an için bi hevesle aklıma gelenler bunlar, bu ilk dokümanım, bilmiyorum foruma nasıl yansır.. Aklıma geldikçe ve olumlu eleştiriler alırsam devam ederim.. Hadi hayırlı olsun.
Ozan Yasin Doğan