Categories
.NET Framework Microsoft .NET

Garbage Collector

MicrosoftGarbage 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.

Categories
.NET Framework Microsoft .NET

Visual Studio 2010 Add Reference

MicrosoftVisual 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ş.

Categories
.NET Framework Microsoft .NET

.NET de Reflection ile Type lara Erisim

Microsoft.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());
}

Categories
.NET Framework Microsoft .NET

Delegate Event Kullanimi

MicrosoftC# da delegate ve event olusturmakla ilgili bir ornek anlatacagim. Oncelikle delegate olusturacagiz ve bunda tureyen de eventimizi olusturacak ve ekrana bir mesaj basacagiz. Burda , verdigim ornekler kucuk kucuk kod bloglari ve ipuclari oldugundan dolayi  event ve delegate nerde ve nasil kullanilir gibisinden bir aciklama yapmayacagim. Asagida ornek kod blogunu ve aciklamasini bulabilirsiniz.

Aynen method tanimlar gibi bir delegate tanimliyoruz , burdaki farkin delegate kelimesi oldugunu goruyorsunuz.

public delegate void dlgMesajYaz();

Daha sonra bir class olusturuyor ve bu class da da dlgMesajYaz delegate inden Event handler ile Evetn olusturuyoruz. Daha sonra da yazdigimiz procedure ismini event  ile cagiriyor ve bir button yardimi ile de ekrana MessageBox da istedigimiz mesaji yazdiriyoruz.  Yazdigimiz class asagidadir.

class EventTest

{

public event dlgMesajYaz evntMesajYaz;

public EventTest()

{

evntMesajYaz += new dlgMesajYaz(MesajYazdir);

}

public void MesajYazdir()

{

MessageBox.Show(“Event Delegate Anlatimi”);

}

}

En son olarak da button yardimi ile ekrana mesaji basiyoruz.

EventTest msg = new EventTest();

msg.MesajYazdir();

Categories
.NET Framework Microsoft .NET

List ve Dictionary Collections

MicrosoftArrayList ve Hashtable collectionsları yerine kullanabileceğimiz List<> ve Dictionary<> Generic Colection`larından kısaca bahsedeceğim.

Öncelike List<> ve Dictionary<>  collection`ları bize daha güvenli kod yazmamızı ve yazdığımız kodlarımızın daha performanslı çalışmasını sağlar. Boxing ve unboxing işlemleri yapmadığımız için performansta büyük getiriler sağlamaktadır.İsimlerinden de anlaşılabileceği gibi List<> Arraylist ve Dictionary<> de Hashtable collectionsları yerine kullanılmaktadır. Bu Framework 2.0 ile gelmiştir ve kullanılışı büyük avantajlar getirmektedir. Dictionary<> collection`su key value şeklinde çalışmaktadır.

Aşağıdaki kodlarda öncelikle Dictionary<> oluşturma ile ilgili örnek verilmiş ve oluşturulan generic collaction`un değeri okunmuştur. İkinci kod bloğunda da List<> `e örnek verilerek yine oluşturulan değer foreach yapısı ile okunmuştur.

Dictionary<int, string> Ekip = new Dictionary<int, string>();

Ekip.Add(1, “Muhammet Ali Hançer”);

Ekip.Add(2, “Yavuz Selim Keresteci”);

Ekip.Add(3, “Erkan Sezer”);

Ekip.Add(4, “Mehmet Salih Avınç”);

foreach (string item in Ekip.Values)

{

MessageBox.Show(item);

}

List<string> Ekip = new List<string>();

Ekip.Add(“Muhammet Ali Hançer”);

Ekip.Add(“Yavuz Selim Keresteci”);

Ekip.Add(“Erkan Sezer”);

Ekip.Add(“Mehmet Salih Avınç”);

foreach (string item in Ekip)

{

MessageBox.Show(item);

}

Categories
.NET Framework Microsoft .NET

Kod Performasının Ölçülmesi

MicrosoftYazdığı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();

Categories
.NET Framework Microsoft .NET

System Tray`da Çalışan Programlar

MicrosoftMessenger , 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.