13 Şubat 2010 Cumartesi

Threads - Intro to Concurrent Programming

Herkese merhabalar;

Bu yazımda size threadlerin(iş parçacığı) ne olduğunu nasıl kullanıldığından bahsetmeye çalışacağım.Ama önce process ve thread kavramlarını kısa olarak bir özetleyelim.
Process : Processler bütündür.Kendine tahsis edilmiş özel bellekleri vardır.Ve genellikle programlara veya uygulamalarla senkron bir şekilde çalışırlar.
Thread : Threadler ise processler içinde bulunur.Ve aynı processler gibi bir execution environment sağlar.Ancak süreçlerden farkı kendilerine ait özel bir bellekleri yoktur.Bu yüzden threadlere light-weight process de denir.

Thread bir programdaki kontrolün sıralı olarak(sequential) akışıdır.Bir çok geleneksel programlama dili ya single-threaded ya da sequential'dır.Yani aynı anda sadece tek bir task'ı işleyebilir.

Eş zamanlı programlama(concurrent programming) ,yani multithreaded programming, bize aynı anda birden fazla taskı işlemeyi sağlar.Peki neden multithread..? Bu sorunun cevabı aslında basit.Tabii ki zaman ve maliyet.Teoride bir sürece daha fazla kaynak tahsis etmek işlemi kısaltır.Ancak multithreading daha ucuza işlemleri tamamlayabilir.

Herkese kolay gelsin :)

17 Aralık 2009 Perşembe

C# 4.0 - Optional Parameters

Merhabalar;
Size C# 4.0'la gelen opsiyonel parametreleri anlatmaya çalışacağım.Programımızda metotlarımızı overload etmek kaçınılmaz olabiliyor bildiğiniz gibi.Ama her method overloading işlemi de bir kod kalabalığı getiriyor.Bu durumlarda opsiyonel parametrelerin getirdiği kolaylığı görelim.
İşlem yapacak bir metodumuz olsun;
public static double Islem(int a, int b , int c )
{
return a * b + c;
}
Öyle bir durum oldu ki metodumuza aktaracağımız parametreleri duruma göre kendimiz verip duruma göre default bırakmamız gerekti.Bunu gerçekleştirmek için aynı isimde başka bir metot yazmalıydık .Ancak şimdi C# 4.0 ile gelen Opsiyonel Parametre ile bunu yeni bir metot yazmadan gerçekleştirebiliriz. Opsiyonel parametrelerin yardımını burda alıyoruz.
Örneğin;
public static double Islem(int a, int b , int c = 1 )
{
return a * b + c;
}
Metodumuzu kullanalım;
Static void Main(string[] args)
{
Console.WriteLine(Islem(
Console.ReadLine();
}
Gördüğünüz gibi opsiyonel olarak tanımladığımız parametre köşeli parantez içinde gösteriliyor.Bu metodu kullanmak istersek;

Console.WriteLine("İşlem Sonucu = " + Islem(1, 2));

İşlemimizin sonucu 3 gelecektir.Ancak biz c parametresini kendimiz de verebiliriz.

Console.WriteLine("İşlem Sonucu = " + Islem(1, 2,3));

İşlemimizin sonucu 5 gelecektir.Yeni bir metot yazmadan bir farklı metotlar elde etmiş olduk.Şimdi 2 tane opsiyonel parametre kullanımına bir göz atalım.

public static double Islem(int a, int b = 2 , int c = 1 )

İstediğimiz kadar opsiyonel parametre kullanabiliriz ancak dikkat ettiğiniz gibi opsiyonel parametreler metodumuzun parametreleri arasında hep en sonda olmak zorundadır.

Örnek olarak bir kullanım görelim;

Console.WriteLine("İşlem Sonucu = " + Islem(1,c : 2));

Gördüğünüz gibi opsiyonel parametreleri sıralı olarak vermek zorunda değiliz.Burada b parametresi bizim atadığımız default değeri alırken c parametresini 2 olarak atamış olduk

Opsiyonel parametreleri kısaca anlatmaya çalıştım.Bir çok kolaylık sağladığını ve sağlayacağına emin olabilirsiniz.Sizi kod kalabalığından kurtaracaktır.

Herkese kolay gelsin :)

12 Kasım 2009 Perşembe

LinqToXml ve RSS

Herkese merhabalar;
Bu yazımda LinqToXml'e bir giriş yaparlen günlük hayatımızda önemli bir yer etmeye başlayan RSS verilerini alarak web sayfamızda görüntülemeye çalışacağım.

Öncelikle bir web uygulamamıza bir user control ekleyelim ve bu user control'de RSS'lerin property bazda tutalım ve daha sonra ana sayfamızda bu RSS'leri görüntüleyelim.

Uygulamamıza eklediğimiz web user control'e ilgili adresteki RSS'imizi parse edicek Linq kodumuzu yazalım.

13 public string adres { get; set; }

//Öncelikle RSS'imizi alacağımız adresi tanımlayalım

14 rotected void Page_Load(object sender, EventArgs e)

15{

1if (!String.IsNullOrEmpty(adres))

//En basitinden adresin valid ya da null olup olmadığını kontrol edelim.Çok çeşitli hatalar alabiliriz ama şimdilik bu kontrol bize yeterli olacaktır.


17 {

18 try

19 {

20 XElement xelement = XElement.Load(adres);

//XElement XML elementini temsil eder.Linq ile sorgulayacağımız RSS'teki XML nesnelerini bu elemente alacağız.


21

22 var items = from i in xelement.Element("channel").Elements("item")

//Burada XML nesnemizin içine giriyoruz.

Benim bu uygulamamda kullandığım RSS http://umutluoglu.com/syndication.axd adresindeki XML nesneleri olacak.Bu adrese girip sayfaya sağ tıkladığınızda XML dosyasında XML yapısını görebilirsiniz.


23 select new

24 {

25 Title = i.Element("title").Value,

26 PubDate = Convert.ToDateTime(i.Element("pubDate").Value),

27 Description = i.Element("description").Value,

28 Link = i.Element("link").Value

29

30 };
//XML nesnesinin özelliklerine görüdüğünüz gibi i.Element("propertiadi") olarak erişebiliyorum.

Sorgumdan geri dönen XML nesnelerimi bir foreach döngüsüne sokarak istediğim işlemi yapabilirim.Ben geri dönen nesnelerimi bir hyperlink olarak göstericem böylece ilgili adresteki RSS lere link referansı vermiş olacağım.


31 foreach (var item in items)

32 {

33 HyperLink hlink = new HyperLink();

34 hlink.Text = item.Title;

35 hlink.NavigateUrl = item.Link;

36 hlink.ToolTip = item.Description;

37 Controls.Add(hlink);

38 Controls.Add(new LiteralControl("<br/>"));

39

40 }

41 }

42 catch (Exception ex)

43 {

44 Label label = new Label();

45 label.Text = ex.Message;

46 Controls.Add(label);

47 }

48 }

49 }


//User controlünü hazırlamayı bitirdik.Şimdi uygulama sayfamıza dönelim.Uygulamamıza hazırladığımız bu user controlü sürükleyip bırakalım.

//Daha sonra uygulamamıza göre isterseniz direk html içinden isterseniz code behinddan
14 WebUserControl11.adres = http://www.umutluoglu.com/syndication.axd;
//olarak atamamızı yapıp programımızı çalıştıralım.



RSS'ler geldi.:)
Herkese kolay gelsin.