- Optimizasyon -
  - Ana Sayfa
  - Rastgele İpucu
  - Genel Optimizasyon
  - String Optimizasyonu

- Makale -
  - XP Stili Görünümü
  - Package&Deployment     Wizard Sorunları
  - InnoSetup ile Kurulum     Paketi Hazırlama


- Ayın İpucu -
Kontrollere veri gönderirken, onları gizleyin. Örneğin, bir listbox'ta 1000 tane string göstermek istiyorsunuz. Önce, 'Visible' özelliğini 'false' yapın, stringleri ekleyin, ve tekrar 'true' yaparak görünür hale getirin. Böylece listbox'ın her eklemede kendini yenilemesine gerek kalmayacak ve daha hızlı işlem yapacaktır. İşlem bittikten sonra kendisini bir kere yenilemesi yeterli olacaktır.
Visual Basic Optimizasyonu

Ana Sayfa > Genel Optimizasyon > Hafıza Optimizasyonu

Hafızayı Optimize Etmek

Ölü Kodlardan Kurtulun

Ölü kod, gereksiz, silinmesi bir şeyi değiştirmeyen kod anlamına gelir.

Ölü kodlar, hiç çağırılmayan fonksiyonları ve alt-programları, hiç kullanılmayan property (özellik) leri, sabitleri (const) ve enum değişkenlerini içerebilir. Ölü değişkenler, bir değer verilmiş olmasına rağmen hiç çağırılmayan değişkenlerdir. Kullanıcı-tanımlı type (tip) ler de ölü olabilir. Ayrıca bir sürü gereksiz API tanımlamaları da olabilir.

Ölü kodlar fazladan hafıza kullanımına, daha yavaş çalışmaya, büyük boyutlu .exe dosyalarına, hatalara ve zaman kaybına neden olurlar. İşte bu yüzden, programınızdaki tüm ölü kodlardan kurtulmak önemli bir aşamadır.

Sabit uzunluklu String kullanmayın

Sabit uzunluklu string değişkenler, genellikle değişken uzunluklu olanlarından daha fazla hafıza harcarlar. Eğer çok uzun stringler ile uğraşıyorsanız bu, içinden çıkılamayacak bir hal alacaktır.

VB.NET bu tür bir tanımlamayı kabul etmediği için daha hızlı işlem yapabilmenizi sağlamaktadır.

Statik değişkenler kullanmayın

Statik değişkenler, programın çalışma süresince hafızaya yerleşen ve orada kalan değişkenlerdir. Statik değişkenlerin karşıtı dinamik değişkenlerdir. Dinamik değişkenler, prosedür seviyesinde değişkenlerdir; prosedür çağırıldığında oluşturulur, prosedür sona erdiğinde yok edilirler.

Peki değişkenin statik ya da dinamik olduğunu nereden bileceğiz?
  Değişkenler Diziler (array)
Statik 1. Declarations kısmında tanımlanan değişkenler.

2. Static ifadesiyle tanımlanan değişkenler.
1. Declarations kısmında boyutuyla tanımlanan diziler. Örneğin:
Dim Dizi(1 To 45)

2. Static ifadesiyle tanımlanan yerel diziler.
Dinamik Yerel (local) değişkenler. 1. Declarations kısmında boyutsuz olarak tanımlanan diziler. Örneğin:
Dim MyArray()

2. Dim veya Redim ifadeleri kullanılarak tanımlanan yerel diziler.
Yerel olarak bahsedilenler bir prosedür içerisinde tanımlananları ifade etmektedir.

Statik değişkenler yavaştır ve fazla hafıza tüketirler. Bunların yerine, normal dinamik değişkenleri kullanmak daha faydalıdır.

Eğer gerçekten statik değişkene ihtiyaç duyarsanız, bunu modül seviyesinde tanımlayarak yapmalısınız.

Kullandıktan sonra hafızayı boşaltın

Eğer statik değişken kullanıyorsanız, rezerve edilen hafıza ile işiniz bittiğinde onu serbest bırakmak önemli bir hal alır. Dinamik değişkenlerde bu önemsenecek bir sorun değildir çünkü işleri bittiğinde yokedilirler.

Aşağıdaki tabloda bazı değişken türleri için hafıza boşaltma yöntemleri verilmiştir. Diziler tablodan sonra incelenecektir.
Değişken Türü Serbest bırakma metodu
Değişken uzunluklu string String = vbNullString
Variant Variant = Empty
Form Unload MyForm
Object (Nesne) Set MyObjectVariable = Nothing

Diziler için hafıza boşaltma

Diziler çok hafıza harcarlar. Özellikle de sabit uzunluklu, çalışma süresince hafızada kalan diziler. Bu yüzden, dinamik diziler hafıza optimizasyonu için daha elverişlidirler, çünkü yeniden boyutlandırılabilirler.

Diğer taraftan bazı yöntemler her ikisi için de kullanılabilirler.
Bir yöntem, bu dizilerin elemanlarını tek tek temizlemekten ibarettir. Diğer bir yöntem ise

Erase veya ReDim kullanmaktır.
  • Erase dinamik dizilerde kullanılan hafızayı temizler. Statik dizilerde bu yöntem kısıtlıdır, yani elemanlarını bir bir silmek ile eşdeğerdir.
     
  • ReDim ise sadece dinamik diziler için kullanılır. Redim kullanarak dinamik bir diziyi kolayca yeniden boyutlandırabilirsiniz.

Değişkenlerinizi belirleyin

VB'nin varsayılan veri tipi variant'dır. Tanımlanmamış her değişken variant tipinde demektir.

Varian değişkenler yavaştır ve hafıza tüketirler. Örneğin, integer tipi yerine variant tipi kullanırsanız, fazladan 14 byte harcamış olacaksınız. Bu kayıp, büyük projelerde çok daha fazla olabilir. Integer tipi, variant'dan daha hızlıdır. Özellikle For...Next döngülerinde çok önemlidir.

Programlarınızın başında Option Explicit ifadesini değişkenlerinizi tanımlamayı hatırlatmak için kullanın. Bu gereksiz yere variant kullanmanızı engelleyecektir. (Ayrıca Visual Studio'da Tools>Options yolunu izleyerek "Require variable declariaton" seçeneğini işaretlediğinizde tanımlanmamış değişkeniniz kalmayacaktır.

Resimler için hafıza optimizasyonu

Resimler çok fazla hafıza kullanarak programınızı yavaşlatabilirler. İşte birkaç küçük ipucu:
  • Hafızayı LoadPicture() ve Cls kullanrak ayarlayın.
    Ayrıca Picture özelliğini Nothing ifadesine eşitleyebilirsiniz. (VB 4.0 ve yukarısı).
     
  • PictureBox yerine Image kontrolü kullanın.
     
  • Bir resmi sadece bir defa yükleyin. Eğer bu resmi birden fazla yerde kullanma ihtiyacı duyarsanız bunu sadece diğer kontrole atayarak yapabilirsiniz:
    Alan2.Picture = Alan1.Picture
    Bu sayede resmi bir kez yükleyip istediğiniz kadar kullanabilirsiniz.
     
  • AutoRedraw = False haline getirin.Aksi halde VB hafıza tüketen bir AutoRedraw resmi yaratcaktır.

Faydalı Linkler
 > vbnet.mvps.org
 > msdn.microsoft.com
 > vbasicmaster.com
 > www.freevbcode.com
 > planet-source-code.com
 > www.vbturk.net
 > www.mutasyon.net
 
Visual Basic Optimizasyonu Sitesi en iyi 800x600 çözünürlükte görüntülenebilmekte
ve tüm browser'larda sorunsuz çalışmaktadır.