Garbage Collector

Erkan Sezer

Garbage Collector .NET `in bize sunmuş olduğu bir üye olup,  sistemi devamli dinleyerek sistemin kullanmadığı nesneleri siler.

GC.Collect metodu ile Garbage Collector`u manuel olarak çağırırız fakat burda dikkatli olmamız gerekmektedir. Ayrıca bunun devreye girmesi için farklı bir metodu da çağırabiliriz , burda bu metoddan bahsedeceğiz ve bunun kullanımını göstererek kullanılan memory farkını göstereceğiz.

Öncelikle GetTotalMemory metodu bizden boolean bir değer ister biz bunu true olarak gönderirsek Garbage Collector devreye girer ama false gönderirsekde devreye girmemesini sağlarız. Biz burda önce false gönderecek kullanılan memory oranını ölçeceğiz ve daha sonra true değeri ile Garbage Collector`ü devreye alarak tekrar memory ölçerek bize kazandırdıklarını göreceğiz.

Kod bloğumuz aşağıdaki gibidir ve ölçülen ilk memory değeri 836492 `dir. Garbage Collector`ü call ettiğimizde ise yani nesneleri temizlediğimizde ise bu değer :  125346 olmaktadır.

long deger = GC.GetTotalMemory(false);
MessageBox.Show(deger.ToString());
long deger2 = GC.GetTotalMemory(true);
MessageBox.Show(deger2.ToString());

Fakat ilk başta belirttiğim gibi Garbage Collector kullanmak biraz sorun yaratabilir bundan dolayi bu konuda dikkatli davranmamız gerekmektedir.


14 Şubat 2010 Pazar


Visual Studio 2010 Add Reference

Erkan Sezer

Visual Studio 2010 çıktığı günden bu yana bunlarla ilgili makaleler , ipuçları vs görmekteyiz ve bunları sizler gibi bende inceliyorum. Tabi birçok diyemesekde yeni özellikler , IDE ilew gelen kullanım kolaylıkları mevcut.

Fakat benim en çok hoşuma giden ise: Visual Studio `da projelere referans eklerken Add Reference dediğimizde bizi çok fazla bekletmesiydi ve daha önceki versiyonlarda bu problem her zaman mevcuttu. 2010 ile gelen Visual Studio`da bu problemin çmzülmesi çok güzel olmuş.

Aslında bütün referanlar , COM objeleri , Projeler vs çok hızlı gelmiyor (yine de önceki versiyonlara göre çok hızlı) sadece kısım kısım gelmesi bizim öok daha hızlı geliyor gibi düşünmemizi sağlıyor ama yine de dediğim gibi bu işlem çok iyi olmuş.

13 Şubat 2010 Cumartesi


Random Sayı

Erkan Sezer

Asp.Net veya C# ile random bir değer üretmenin nasıl olduğuna bakacağız. Aslında işlem çok basit ama dikkat etmemiz gereken konu: ramdom bir değer üretildikten sonra bir sonra üretilen değer ile bunun aynı olabileceğini düşünmeliyiz ve bunu programlarımızda biz kontrol etmeliyiz.

Random olarak aşağıdaki gibi bir değer üretebilirz ve bunuda kod bloğunda gördüğünüz gibi ekranda MessageBox ile gösteriyorum. Dah alttaki kod bloğunda ise : iki değerarasında bir ramdom sayı üretiyorum.

Random rnd = new Random();

MessageBox.Show(rnd.Next().ToString());

 

Random rndSinirli = new Random();

MessageBox.Show(rndSinirli.Next(1, 10).ToString());


07 Şubat 2010 Pazar


.NET de Reflection ile Type lara Erisim

Erkan Sezer

.Net de kullandigimiz bir cok nesne var ve bunlara ait uyelerin oldugu kucuk bir ornek yapacagim. Burda en cok kullanilan componentlardan olan butonun uyelerinin isimlerini ve metodlarini MessageBox ile ekrana yazdiracagim.

Oncelikle butonun GetType ile tipini aliyorum, daha sonra MemberInfo sinifi ile tum member larini alip foreach ile tum sinifin icinde donerek ekrana yazdiriyorum.

Type tip = button1.GetType();
System.Reflection.MemberInfo[] tipMember=tip.GetMembers();

 foreach (var item in tipMember)
 {
        MessageBox.Show("Isim : " + item.Name.ToString() + " --- Member Type : " + item.MemberType.ToString());
}

06 Eylül 2009 Pazar


Formdaki İçeriği Temizlemek

Erkan Sezer

Oluşturduğumuz sayfalarda çok fazla TextBox vb componentler vardır. Biz yaptığımız işlerden sonra bu componentların içeriklerini boşaltırız. Bunun için genellikle hepsi için tek tek kodlar yazarız ve bu bizim kodlarımızı her zaman artırır ve yönetimini zorlaştırır. Özellikle development aşaması devam eden projelerde her development sonrası bu işlem için tekrar kod yazacağımız düşünülürse bu çok basit de olsa unutulduğunda kodun manage edilmesinin ne kadar zorlaşacağını gösterir.

Bunun için çok daha basit bit yöntem vardır. Formdaki tüm textboxların içeriğini temizlemek için aşağıdaki gibi bir kod bize yetecektir ve sadece 1 kez yazmış olacağız. Tabi bunu combolar için veya radio buttonlar içinde yapabiliriz.

foreach (Control ControlTextBox in this.Controls)

{

if (ControlTextBox is TextBox)

{

     ControlTextBox.Text = "";

}

}


26 Ocak 2009 Pazartesi


Kod Performasının Ölçülmesi

Erkan Sezer

Yazdığımız kodların her zaman performanslı çalışmasını isteriz ve bundan dolayı yazdığımız kodlar üzerinde optimizasyonlar yaparız. Performans ölçme ile ilgili çeşitli yöntemler vardır. Burda bu yöntemlerden çok yazdığımız kodun ne kadar sürede çalıştığını görmek açısından örnek kod bulağu yazacagım.

Sayaç oluşturarak yazdığımız kodların ne kadar sürede çalıştığını görebiliriz. Aşağıda buna ait kodları görebilirsiniz. Tabiki sonunda sayacı resetlemeliyiz.

Stopwatch Sayac = new Stopwatch();

Sayac.Start();

Yapmak istediğimiz işlemler

Sayac.Stop();

MessageBox.Show(Sayac.Elapsed.TotalSeconds.ToString());

Sayac.Reset();


20 Ocak 2009 Salı


System Tray`da Çalışan Programlar

Erkan Sezer

Messenger , ağ bağlantısı veya hoparlör System Tray`da yani bilgisayarımızın sağ alt köşesinde her zaman çalışmaktadır. Bizde bununla ilgili basit bir uygulama yapacağız. Öncelikle projemize yani (formumuzun açık olduğunu varsayıyoruz :)) NotifyIcon ekleyeceğiz ve bunun Text özelliğine System Tray da bunun üstüne geldiğimizde üstünde yazmasınız istediğimiz text değeri yazarız. Dikkat edeceğimiz bişey daha da şudur:NotifyIcon nesnesini Image proıperty sine bir .ico uzantılı image atamalıyız ki: System Tray da bunu da görelim. Ayrıca bu işlemi yapmak için programı kapatmayacağız sadece minimize edeceğiz.

Öncelikle: Formun load`una aşağıdaki kodu yazacağız çünkü , bu formun görev çubuğunda gösterilmesini engelleyecek.

private void Form1_Load(object sender, EventArgs e)

{

       this.ShowInTaskbar = false;

}

Daha sonra ise NotifyIcon `ın belirtilen eventine aşağıdaki kodu yazarak çift tıkladığımız System trayda çalışan programımızı tekrar windows ekranına getiririz.

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)

{

      if (this.WindowState == FormWindowState.Minimized)

              this.WindowState = FormWindowState.Normal;

      this.Activate();

}

Son bişeye dikkat edecek olursak: programı minimize ettiğimizde system traya gelen programıımızın üstüne geldiğimizde NotifyIcon`ın Text özelliğine ne yazdıkysak açıklama olarak onu görmekteyiz.

19 Ocak 2009 Pazartesi