ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

Garbage Collector ve Dispose Metodu

Onur YILMAZ
C#.NET
24.05.2011 16:14:20
Hit : 6574

Merhabalar bu makalede kaynak yönetiminden bahsetmek istiyorum.
Her meslekte olduğu gibi yazılımdada kaynakları iyi kullanmamız gerekmektedir.
 
Eğerki elimizdeki kaynağı, belleği iyi kullanamaz isek performas açısından kötü yazılımlar geliştirmiş oluruz.
 
Peki belleği nasıl kontrol edip iyi kullanabiliriz?
 
Elimizde aslında kıymetini çok bilmediğimiz bir yapı var adı “Garbage Collector” yani çöp toplayıcı.GB’yi biz kullanmasakta o belli zaman aralıklarında kendisi çalışır ve bellekte boşa çıkmış olan yada uzun zamandır ulaşılmamış olan kaynakları sonlandırarak bellekte yer açmaya yarar.
 
Peki GB tek başına yeterlimidir?
Tabiki hayır GB new ile türetmiş olduğumuz bir nesnenin hiçbir kaynak tarafından kullanılmadığı ana kadar nesneyi bellekten kaldırmaz tabi bu bazen çok uzun zaman alabilir dolayısı ile bellekte  şişmeler olur ve OutOfMemoryException alırız.İşte bu yüzden GB’ye kaynakları boşaltabilmesi için yardımcı olmalıyız.
 
Nasıl yardımcı olabiliriz?
İşte bu noktada Dispose metodu devreye giriyor.Dispose metoduna ulaşmak için yazmış olduğumuz Sınıfa IDisposable Interface(Arayüz)sini uygulamamız gerekmektedir.
 
IDisposable Interface’si ile Dispose metodu gelir ve bu metod uygulandığı sınıftan türeyen nesnenin işi bittiği anda bellekten kaldırılmasını sağlar.Tabiki içerisine yazacağımız kodlar ile.
 
Açıklayıcı örnek ile daha iyi anlaşılacaktır sanırım;
 
Buyrun bir öğrenci Sınıfı oluşturalım ve bu öğrenci sınıfından türetilen nesnelerin işi bittiği anda bellekten de kaldırılmasını sağlayalım.
 
Öğrenci Sınıfımızı aşağıdaki kod ile oluşturalım.
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace Samples
{
    class Ogrenci:IDisposable
    {
        ///<summary>
        /// Ogrencinin Adı,Soyadı ve Doğum Tarihini istiyor olalım
        ///</summary>
        #region Değişkenler(Variables)
        string _Adi;
        string _SoyAdi;
        DateTime _DogumTarihi;
        #endregion
 
        #region Özellikler(Properties)
        public string Adi
        {
            get { return _Adi; }
            set { _Adi = value; }
        }
        public string SoyAdi
        {
            get { return _SoyAdi; }
            set { _SoyAdi = value; }
        }
        public DateTime DogumTarihi
        {
            get { return _DogumTarihi; }
            set { _DogumTarihi = value; }
        }
        #endregion
 
        #region IDisposable Members
        public void Dispose()
        {
            //Dispose Metodu çağırıldığında Garbage Collector'ün SuppressFinalize metoduna this diyerek
            //Bu sınıftan türetilmiş olan nesneyi sonlandırmaya,serbest bırakmaya zorluyoruz.Bu sayede bizim
            //bu kod ile bizzat sertbest bıraktığımız kaynaklar ile destructor'umuz tekrar uğraşmak zorunda kalmıyor
            //buda bize performas olarak geri dönüş sağlıyor.
            GC.SuppressFinalize(this);
        }
        #endregion
    }
}
 
 
Şimdi ogrenci sınıfından bir nesne türetelim ve onu dispose metodu ile bellekten kaldıralım.
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace Samples
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Ogrenci insOgrenci = new Ogrenci();
            insOgrenci.Adi = "onur";
            insOgrenci.SoyAdi = "yılmaz";
            insOgrenci.DogumTarihi = Convert.ToDateTime("15.11.1903");
 
            //Bilgilerini aldığımız öğrencimizi veri tabanımıza insert ettiğimizi var sayıyoruz.
            //ve ogrenci sınıfından türetmiş olduğumuz nesneyi dispose metodunu çağırarak bellekte
            //yer işgal etmesini engelliyoruz.
            insOgrenci.Dispose();
        }
    }
}
 
Bir sonraki makalede görüşmek üzere,
İyi günler dilerim.



BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR