İlkay İlknur
Just a developer...

Visual Studio 2010 Tips #8 - Breakpoint Import / Export

Cumartesi, 27 Şubat 2010 17:08 by ilkayilknur

Merhaba Arkadaşlar,

Visual Studio 2010 Tips yazı dizimize kaldığımız yerden devam ediyoruz. Bu yazımızda ise ufak ama çoğu durumda oldukça kullanışlı olacak bir özellikten bahsedeceğiz. Geliştirme süresince hataların bulunması, keşfedilmesi ve düzeltilmesi hayati önem taşımaktadır. Debugging işlemi boyunca en çok kullandığımız yapı ise Breakpointler. Ancak Visual Studio'nun 2010 sürümüne kadar kullandığımız tüm breakpointler sadece kendi makinamızdaki projelerde bulunmaktaydı. Yani projede koyduğumuz tüm breakpointleri bizimle beraber çalışan başka bir arkadaşa göndermek istediğimizde bunu yapamamaktaydık. Ancak Visual Studio 2010 ile beraber gelen Breakpoint Import/Export özelliği bu işlevsellikte mümkün hale geldi.  

Bunun için ilk yapmamız gereken Debug=>Windows=>Breakpoint penceresini açmak. 

Daha sonra ise bu pencerede bulunan Export butonunu kullanarak tüm breakpointleri XML dosyası olarak elde edebiliriz.

Aynı şekilde Import butonunu kullanarak ta XML dosyasını Import ederek tüm breakpointleri projemize doğrudan ekleyebiliriz. Smile

Görüşmek Üzere,

 

Tags:  
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Gençsen Geleceksin 3.0 - Çanakkale Onsekiz Mart Üniversitesi

Cumartesi, 27 Şubat 2010 14:43 by ilkayilknur

Merhaba Arkadaşlar,

Microsoft ile Turkcell'in üç yıldır birlikte düzenlediği Gençsen Geleceksin etkinliklerinin Çanakkale Onsekiz Mart Üniversitesi ayağında Microsoft tarafında konuşmacı olarak MSP arkadaşım Mehmet Cem Yücel ile beraber dün Çanakkale'deydik. Cem Windows 7 ve IE 8 ile beraber gelen yeniliklerden bahsederken ben de mobil taraftaki gelişmelerden, yaz aylarında piyasaya sürülecek olan Windows Phone 7'den ve Microsoft öğrenci programlarından bahsettim.

 

 

Salonda bulunan 130 kişiyle beraber güzel ve faydalı bir 2 saat geçirdiğimizi düşünüyorum. Etkinlik boyunca ve etkinlik sonunda arkadaşların Windows 7 ile oldukça ilgili olduklarını görünce toplam 7 adet Windows 7 hediye ettik. Etkinlik sonunda ise kordonboyunda hemen yemeğimizi yedikten sonra kısa bir tur yaparak Çanakkale maceramızı sona erdirdik. Smile  

 

Umarım yine güzel bir etkinlikte yolumuz Çanakkale'ye düşer ve bu sefer daha fazla zaman geçiririz.

Ayrıca buradan bizim bu etkinlikte yer almamızı sağlayan Microsoft Türkiye Akademik Programlar Yöneticisi Mehmet Tunçkanat'a ve bizi Çanakkale'de ayarlayan ve etkinliği düzenleyen Bilal Korkmaz'a çok teşekkür ediyorum.

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Dynamic Language Runtime Script Hosting - Görsel Ders

Pazar, 21 Şubat 2010 18:00 by ilkayilknur

Merhaba Arkadaşlar,

Bu görsel dersimizde Dynamic Language Runtime ile beraber gelecek olan Script Hosting yapısını inceliyoruz.

Get Microsoft Silverlight

 

Görsel dersi buradan indirebilirsiniz.

Görüşmek üzere,

Tags:   ,
Categories:   .NET Framework 4.0 | C# 4.0
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Visual Studio 2010 Tips #7 - DataTips Yenilikleri

Salı, 16 Şubat 2010 17:01 by ilkayilknur

Merhaba Arkadaşlar,
Bu yazımızda Visual Studio 2010 ile beraber gelen DataTip yeniliklerini inceliyor olacağız. DataTipler debugging sırasında bizlere yardımcı olan değişkenlerin değerlerini gösteren küçük tipler. Değişkenin üzerine geldiğimizde görünür olan kullanışlı yardımcılar.

Özellikle Visual Studio 2010 ile beraber DataTipler ile ilgili pekçok yenilik gelmekte. Bu yenilikler ile DataTiplerin çok daha fonksiyonel ve kullanışlı olduğunu söylememiz mümkün. 

DataTiplerin Pin Edilmesi

Visual Studio 2010 ile beraber DataTiplerin kazandığı en güzel özelliklerden birisi sabitlenebilmesi. Eski versiyonlarda sadece pointer üzerine geldiğinde görünür olan DataTipler artık sağ taraftaki Pin butonuna basıldığında sabitlenebilmekte. 

 

Böylece sabitlenen DataTip tüm debuging süresince değişkenin bulunduğu satıra sabitleniyor ve değişken üzerindeki tüm değişiklikler buradan kolayca izlenebiliyor.

Bunların yanında DataTiplerin altına artık yorum eklememizde mümkün. Bunun için en altta bulunan ve aşağıyı gösteren butonu tıklamamız yeterli.

Peki DataPinlere debug işlemi bittikten sonra ne oluyor ? DataPinler debug işlemi bittikten sonra görünmez duruma geçiyorlar. Ancak ilgili kod satırının başında bu satıra pinlenmiş bir DataPin olduğunu gösteren bir icon bulunmakta. Bu ikonun üzerine geldiğimizde DataPin görünür duruma geçiyor ve debug esnasında aldığı son değeri gösteriyor.

DataPin Import/Export

Şuana kadar DataPinler üzerindeki yaptığımız işlemler sadece kendi makinamızda geçerliydi. Yani yazılan yorumlar yada DataPinlerin yerleri sadece kendi makinamızda geçerliydi. Peki biz bu DataTipleri bir şekilde dışarı aktarabilsek ve bizimle aynı projede çalışanlarla bu DataTipleri paylaşabilsek ve onlarında aynı yorumları görebilmesini sağlasak nasıl olurdu ? Bence müthiş olurdu Smile

Bunun için yapmamız gereken export etmek için Debug -> Export DataTips yolunu izlemek. Export edilen dosya tipi ise tabi ki XMLSmile

Import etmek için de Debug -> Import DataTips yolunu izlememiz yeterli.

Gördüğünüz gibi artık DataTipleri başkaları ile paylaşmak oldukça kolay.Wink 

Görüşmek Üzere,

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Visual Studio 2010 Tips #6 - Navigate To Penceresi

Pazartesi, 15 Şubat 2010 00:11 by ilkayilknur

Merhaba Arkadaşlar,

Yazılım geliştirme projelerinin büyümesiyle beraber karşılaşılan en büyük sorunlardan biri de istenilen metodun,eventin vs.. kodunun bulunmasıdır. Solution içerisindeki projeler, classlar arttıkça istediğimiz kodu çok daha zorlaşır. Bu yazımızda ise Visual Studio 2010 ile beraber gelen ve artık istediğimiz kodları bulmamamızı oldukça kolaylaştıracak olan Navigate To penceresini inceleyeceğiz. 

Navigate To penceresini açtığımızda, bu pencerenin aranan kelimeyi soran kısım ve sonuçların listelendiği kısım olmak üzere 2 bölümden oluştuğunu görmekteyiz. Aradığımız kelimeyi bu kısma yazdığımızda bize o Solution içerisindeki eşleşen tüm sonuçlar bir liste halinde listelemektedir. Ayrıca ekranın alt kısmında da bulunan metodun, propertynin vb.. hangi proje içerisinde hangi sınıfta ve kaçıncı satırda olduğu da gösterilmektedir. Örneğin, kendi geliştirdiğim bir projede GetContext isimli bir metot bulunmaktadır. Bu metodu bulmak için ilgili alana adını yazdığımızda bize sonuçları aşağıdaki gibi döndürmektedir.

Ayrıca bir önceki Visual Studio Tips yazımda bahsettiğim Intellisense özelliklerinin hepsi burada da geçerli. Yani ben sadece Context yazarsam yine bu metoda erişebilirim yada Pascal-Case olarak GC yazarsam yine bu metoda erişebilirim. Bunun yanında sonuç penceresi içerisindeki ilgili sonuca çift tıklarsak ilgili metodun, propertynin vb.. tanımına doğrudan ulaşabilmekteyiz.

 

 

Son olarak Navigate To penceresine kısayol olarak Ctrl + , ile ulaşabildiğimizi belirtmek isterim. 

Görüşmek Üzere,

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Visual Studio 2010 Tips #5 - Intellisense Yenilikleri

Cumartesi, 13 Şubat 2010 20:27 by ilkayilknur

Merhaba Arkadaşlar,

Biz yazılım geliştiricilerin Visual Studio üzerinde vazgeçemeyeceği en önemli özelliklerden biri de Intellisense özelliği. Özellikle bizlerin hızlı ve doğru bir şekilde kod yazması için etkin bir intellisense mekanizması olmazsa olmaz bir duruma gelmiş durumda. Bu yazımızda da Visual Studio 2010 ile beraber Intellisense tarafında gelen yenilikleri inceliyor olacağız. 

Visual Studio 2010 yeni Intellisense özelliklerini 2 madde altında inceleyeceğiz. Bunlar,

  • Like stili arama mekanizması
  • PascalCase arama mekanizması

Like Tarzı Arama Mekanizması 

Visual Studio 2008 sürümüne baktığımızda istediğimiz komuta ulaşmamız için baştan itibaren kodu doğru yazmamız gerekiyordu. Yada sadece belirli bir kısmını hatırladığımız komutu bulmak için mutlaka komutun başını doğru bir şekilde yazmamız gerekiyordu. Ancak Visual Studio 2010 sürümü ile beraber artık yazdıklarımız komutların tüm gövdesinde aranmakta. Yani tıpkı SQL'de bulunan LIKE komutu ile yapılan (%komut%) gibi bir arama yapılmakta. Örneğin Console sınıfının static metotlarından biri olan WriteLine metodunun başını hatırlamadığımızı sadece Line kısmını hatırladığımızı düşünelim. Bu durumda 2008 sürümünde Intellisense'in bize hiçbir şekilde faydası olamayacaktı. Ancak Visual Studio 2010'da Line kelimesi WriteLine ve ReadLine komutların sonunda olmasına rağmen Intellisense tarafından bize önerilecektir.

Visual Studio 2008

Visual Studio 2010

Bu özellik tüm tipler(metotlar, delegateler vb...) için geçerlidir.

Pascal-Case Arama Mekanizması

Visual Studio 2010 Intellisense yeniliklerinden biri de Pascal-Case arama mekanizması. Bu özellik ile artık sadece istediğimiz metottaki yada hangi tipse bu tipin adındaki sadece büyük harfleri yazarak o tipe hemen ulaşabilemekteyiz. Örneğin Console sınıfı içerisinde bulunan CancelKeyPress eventine ulaşmamız için sadece CKP yazmamız bizim için yeterli oluyor. Smile

Visual Studio 2010 Intellisense özellikleriyle artık daha hızlı bir şekilde istediğimiz kodu yazmamız mümkün hale gelmekte.

Not : Geçtiğimiz günlerde görücüye çıkan RC sürümünde Tablet PC, Multitouch tarzı bilgisayarlarda Intellisense özelliğinde sorunlar olduğu tespit edilmiştir. Yaklaşık 1 hafta içerisinde de bu sorunların çözümüyle ilgili bir patch çıkarılacağı ScottGu tarafından açıklanmıştır.

Kolay Gelsin,

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Visual Studio 2010 RC Yayınlandı !

Salı, 9 Şubat 2010 22:56 by ilkayilknur

Merhaba Arkadaşlar,

8 Şubat 2010 (Dün) itibariyle Visual Studio 2010'un release'den önceki son sürümü olan RC(Release Candidate) sürümü MSDN üyelerine açıldı. Visual Studio 2010'un release periyodunun uzatılmasında ve RC sürümün bu periyoda eklenmesindeki en temel amaç özellikle kullanıcılardan alınan feedbackler sonucunda Beta 1 ve Beta 2'de bulunan özellikle performans sorunlarının ve bugların giderilmesi ve bir RC sürümü ile tekrardan Visual Studio 2010'un kullanıcıların testine açılmasıydı. RC sürümü ile beraber birçok performans iyileştirmesi yapılmış durumda. Ayrıca editörlerde, build ortamında ve daha pekçok kısımda bulunan buglar da giderilmiş durumda. 

RC sürümündeki en önemli gelişme ise Go-Live lisansının gelmesi. Yani artık .NET 4.0 RC ve VS 2010 RC'yi ticari uygulama geliştirme ortamlarınızda da kullanabilirsiniz ve ticari uygulamalar geliştirebilirsiniz.

Silverlight 4.0 Geliştiricileri Ne Yapacak ?

Eğer sizde benim gibi daha Beta aşamasında olan Silverlight 4.0 ile bir uygulama geliştiriyorsanızSmile yada Silverlight 4.0'ı test etmeye devam etmek istiyorsanız maalesef size beklediğiniz haberi veremeyeceğim. Visual Studio RC buildi Silverlight 4.0 Beta'nın çıkmasından sonra yapıldığı için en azından Silverlight 4.0 Beta için WCF RIA Services, Control Toolkit yada Silverlight SDK hiçbir ürünü kullanamamaktayız. Microsoft'tan yapılan açıklamaya göre Silverlight 4.0'ın bir sonraki versiyonunda(Beta 2 yada RC) Visual Studio 2010 RC üzerinde uygulama geliştirilebileceği söylenmekte. Ancak Silverlight 4.0 'ın bir sonraki sürümünün ne zaman geleceği de söylenmemekte.(En azından public olarak Wink) Yani kısacası Silverlight 4.0 kullananlar hala daha Beta 2 'ye mahkum durumda. Ayrıca belirtmekte fayda Beta 2 ve RC sürümleri beraber kullanılamıyor. Smile

 

Unutmadan RC sürümü 10 Şubat 2010 tarihinde herkese açılmış olacak. RC sürümünde karşılaştığınız bugları Microsoft'a bildirmeyi unutmayın. 

 

image

Kolay Gelsin

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share

Java Platformundan WCF Servisine Erişim

Pazartesi, 8 Şubat 2010 15:24 by ilkayilknur

Merhaba Arkadaşlar,

Bildiğimiz gibi web servisleri bizim belirli bir uygulama mantığını network üzerinde kullanıma açtığımız bir altyapı olarak karşımıza çıkmaktadır. Ayrıca web servisleri belirli standartlar (XML,WSDL,SOAP vb. ) üzerinde çalıştığından dolayı platform bağımsız bir çözüm olarak tanımlanmaktadır. Yani yazdığımız bir web servisi ister JAVA olsun ister .NET olsun tüm platformlardan çağırılabilmekte ve döndürdüğü sonuçlar da yine farklı platformlardaki uygulamalar tarafından kullanılabilmektedir. Bu yazımızda ise WCF servislerine Java platformundan nasıl ulaşıldığını ve tüketildiğini inceliyor olacağız. 

İlk olarak tüketilecek olan web servisini hazırlayarak başlıyor olacağız. PointService adını vereceğimiz web servisi iki Point tipinde aldığı parametreyi toplayıp geriye tek bir Point tipi döndürecek. Burada Point sınıfını da servis içerisinde tanımlayarak kompleks tipte veri işlemi yapılmasını da sağlıyor olacağız.

PointService Tanımlanması

Öncelikle servisimizin operasyonlarını belirlemek amacıyla IPointService adında bir Interface oluşturacağız. Ayrıca yine servis içerisinde kullanacağımız Point sınıfını da burada tanımlayacağız.

[ServiceContract]

interface IPointService{

    [OperationContract()]

    Point Add(Point point1, Point point2);

}

[DataContract]

public class Point{

    [DataMember]

    public double x { get; set; }

    [DataMember]

    public double y { get; set; }

}

Daha sonra ise bu yazdığımız interface'i gerçekleştirecek edecek olan web servisimizi tanımlayacağız.

public class PointService : IPointService
{
    public Point Add(Point point1, Point point2)
    {
         Point point = new Point();
         point.x = point1.x + point2.x;
         point.y = point1.y + point2.y;
         return point;
    }
}

WCF tarafında yapacaklarımız bu kadar. Artık servisi çalıştırıp test edebiliriz. Test ederken servisin adresini bir kenara not etmemizde fayda var. Çünkü Java tarafından servisi çağırırken bu adresi kullanıyor olacağız.Wink

Java Tarafı Nasıl Olacak ?

Java tarafına geçtiğimizde ise senaryo aslında .NET tarafındaki proxy oluşturma mekanizmasına kısmen benzemekte. Ben bu kısımda Eclipse editörünü kullanıyor olacağım.

Başlangıç olarak PointServiceClient isimli bir konsol uygulaması açıyoruz. Daha sonra ise kullanacağımız WCF servisini projemize referans etmemiz gerekiyor. Bunun için projemizin üzerine sağ tıklayıp New menüsünden Other seçeneğine tıklıyoruz ve gelen ekrandan Web Service Client'ı seçiyoruz.

 

Next ile devam ettikten sonra web servisinin WSDL dökümanını isteyen bir ekran ile karşılaşıyoruz. WSDL dökümanları bizim servislerimizin davranışını, içerisindeki tipleri, binding tiplerini tanımlayan XML tabanlı dökümanlar. Bu ekrana doğrudan WCF servisimizin WSDL dökümanı uzantısını veriyoruz.

 

Daha sonra Finish butonuna tıklayarak proxy oluşturma işleminin sonuna geliyoruz. Bu noktada tıpkı .NET tarafında Visual Studio üzerinde yaptığımız Add Service Reference işleminin aynısını yapmış olduk. 

Eclipse ise kullanmamız üzere bize aşağıdaki sınıfları oluşturuyor.

 

Gördüğümüz gibi servisimiz içerisinde kullanacağımız Point sınıfı ve diğer gerekli tüm sınıflar oluşturuldu. Bizim servisi çağırmak için kullanacağımız sınıf ise IPointServiceProxy sınıfı. Şimdi gelin Main metot içeren bir Test sınıfı yaratalım ve servisi kullanalım.

 

Baktığımız zaman aslında farklı olarak karşıyacağımız iki nokta karşımıza çıkmakta. Bunlardan biri bizim .NET tarafında automatic property olarak tanımladığımız x ve y attributeleri için getter ve setter metotları oluşturulması. Aslında .NET tarafında da aynı şey yapılmakta idi ama biz bundan habersiz oluyorduk. Smile Bir diğer farklı kullanım ise double parametre alan setter metotta primitive tip olan double değilde bu tipi sarmalayan Double sınıfının kullanılması. Bunun dışındaki kullanımlar ise bizim .NET tarafından da aşina olduğumuz kullanımlar. Uygulamayı çalıştırdığımızda ise sonucu konsoldan gözlemleyebiliriz.

 

Evet arkadaşlar bu yazımızda yarattığımız WCF servislerinin Java platformunda nasıl kullanıldığını incelemiş olduk. Ayrıca Web Servislerinin cross-platform olduğunu da görmüş olduk.Smile 

Görüşmek Üzere,

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (1) | Yorumlar RSSRSS Yorum Takibi
Share

Visual Studio 2010 Tips #4 - Extension Manager

Cumartesi, 6 Şubat 2010 21:52 by ilkayilknur

Merhaba Arkadaşlar,

Bu yazımızda Visual Studio 2010 ile beraber gelecek olan Extension Manager'a göz atıyor olacağız. Uygulama geliştirmemiz sırasında bazı ihtiyaçlarımızı karşılamak için bir takım extensionlar kullanmaktayız. Bu extensionlar genelde bizim gibi çeşitli ekstra fonksiyonalitelere ihtiyacı olan yazılım geliştiriciler için yazılır ve kullanıma sunulur. Visual Studio 2010'dan önceki sürümlerde ise hep gereken extensionları çeşitli sitelerden bulmamız ve bunları kendi elimizle yüklememiz gerekirdi. Ayrıca daha sonra belirli aralıklarla updateleri takip etmemiz de gerekmekteydi. Bu nedenlerden dolayı da extensionların yüklenmesi, yönetilmesi ve güncellenmesi oldukça zor ve sıkıntılı olmaktaydı.

Extension Manager

Yukarıda saydığım tüm bu nedenlerden dolayı Visual Studio 2010 ile beraber Extension Manager denilen merkezi bir extension yönetim mekanizması karşımıza çıkmakta. Tools -> Extension Manager menüsünden ulaştığımız Extension Manager içerisinden Visual Studio içerisinde Share

.NET Framework 4.0 Beta 2 - Lazy Sınıfı Kullanılarak Lazy Initialization Sağlanması

Cuma, 5 Şubat 2010 15:47 by ilkayilknur

Merhaba Arkadaşlar,

Yazılım geliştirme süreci içerisinde en sık yaptığımız işlemlerden biri nesne yaratma işidir. Bir uygulama içerisinde belki yüzlerce belki de binlerce kez nesne yaratırız ve bu nesneleri kullanırız. Yarattığımız nesnelerin bazıları sadece basit üyeler içeren nesneler olurken bazıları ise içerilerinde complex üyeleri barındabilen nesneler olabilmekte. Bazı nesneler ise içerlerinde sadece bir üye barındırsalarda bu üye oldukça fazla memory harcayabilir. Bu nedenlerden dolayı aslında çoğu zaman düşünmeden yaptığımız nesne yaratma işlemlerinde çok daha dikkatli olmamız gerekir. Yani bellekte fazla yer kaplayacak bir nesneyi en baştan yaratmak yerine o nesneye ihtiyacımız olacağı yerde yaratmak uygulamamızı çok daha etkin bir hale getirecektir. Yazılım dünyasında bu kavrama Lazy Initialization denmektedir. Çoğu zaman bu ihtiyacımızı karşılamak için çeşitli patternlara bağlı kalarak bahsettiğimiz fonksiyonaliteyi sağlayabilmekteydik. Ancak .NET Framework 4.0 ile birlikte Lazy<T> sarmalayıcı sınıfı kullanarak kolay bir şekilde Lazy Initialization sağlayabilmekteyiz. Şimdi gelin hep beraber Lazy<T> sınıfının üyelerine öncelikle bir göz atalım.

Lazy<T> Sınıfı

Lazy sarmalayıcı sınıfı System namespace'i içerisinde yer almaktadır. Lazy sınıfının constructorlarına baktığımızda 4 farklı constructor karşımıza çıkmakta. Func<T> tipindeki delege Lazy sınıfı içerisinde sarmalanan sınıfının yaratılacağı sırada çalışacak olan metodu gösterecektir. Boolean tipteki bool parametresi ise Lazy sınıfının ThreadSafe olup olmayacağını göstermektedir. Yazımızın ilerleyen bölümlerinde bu kavrama da değiniyor olacağız. Lazy sınıfının üyelerinde baktığımızda ise IsValueCreated isimli üye sarmalanan sınıfın yaratılıp yaratılmadığını belirten bir boolean değerdir. Value üyesi ise sarmalanan sınıfı göstermektedir. Sınıfın üyelerine bu üyeyi kullanarak erişiyor olacağız.

Öncelikle basit olarak bir sınıf oluşturalım ve daha sonra Lazy Initialization mekanizmasının nasıl Lazy<T> sınıfı tarafından sağlandığını görmeye çalışalım. Öncelikle basit bit Insan sınıfı yaratıyoruz.

class Insan

{

   public int ID { get; set; }

   public string Ad { get; set; }

   public string Soyad { get; set; }

   public Insan()
   {
       ID = 1;
       Ad = "İlkay";
       Soyad = "İlknur";
   }

}

 

Şimdi Lazy sınıfımızı yaratıyoruz ve Insan sınıfının ne zaman yaratıldığını inceliyoruz.

static void Main(string[] args)
{
   Lazy<Insan> insan = new Lazy<Insan>();
   Console.WriteLine("Yaratıldı mı : "+insan.IsValueCreated);
   Console.WriteLine("ID : {0}\nAd: {1}\nSoyad: {2}",insan.Value.ID,insan.Value.Ad,insan.Value.Soyad);
   Console.WriteLine("Yaratıldı mı : " + insan.IsValueCreated);
   Console.ReadLine();
}

Uygulamamızı çalıştırırsak.

Gördüğümüz üzere nesnemiz lazy nesnesi oluşturulma sırasında yaratılmadı. Biz ne zaman nesnenin bir üyesine erişmek istedik o zaman nesne yaratıldı ve kullanıldı.

Yukarıdaki örneğimizde Insan sınıfının bir constructorı vardı ve o constructorda atanan değerlerle biz nesnemizi kullanıyorduk. Şimdi ise Lazy sınıfının bir diğer kullanım şeklini inceleyeceğiz. Bu senaryomuzda ise öncelikle Insan sınıfı içerisinde bulunan constructorı siliyoruz ve Lazy sınıfını tanımladığımız yere (Örnekte Console uygulamasının çalıştığı Program sınıfı) bir GetInsan isimli bize bir Insan nesnesi döndüren aşağıdaki metodu yazıyoruz.  

static Insan GetInsan()

{

   return new Insan()

   {

       ID=2,

       Ad="Çağdaş",

       Soyad="Olgun"

   };

}

Daha sonra Lazy sınıfının yaratılmasını da şu şekilde değiştiriyoruz.

Lazy<Insan> insan = new Lazy<Insan>(() => GetInsan());

Şimdi ise uygulamamızı çalıştıralım ve sonuçları gözlemleyelim.

Gördüğümüz gibi Insan sınıfı yine sadece belirli bir üyesine ihtiyaç duyulunca yaratıldı. Yaratılma şeklini ise bu sefer farklı bir şekilde gerçekleştirdik. Yaratılma sırasında Lazy sınıfı parametre olarak aldığı lambda ifadesindeki kodu çalıştırdı ve buradaki sonucu doğrudan sarmaladığı tipe yansıttı. Ayrıca GetInsan metodu içerisindeki ifadeleri doğrudan  bu lambdanın gövdesine koyabilirdik. Bu şekilde de yine aynı fonksiyonaliteyi sağlayabiliriz.Wink

Multithread Yapılarda Lazy<T> Sınıfının Kontrolü

Lazy<T> sınıfını kullanırken aklımıza gelecek durumlardan biri de Multithread durumlar. Birden çok threadin aynı lazy nesnesine erişmesi sonucunda Lazy sınıfının sarmaladığı nesneyi sadece bir kere yaratmasının garanti altına alınması gerekmektedir. ThreadSafe adı verilen bu özellik bizim kullandığımız Lazy sınıfı içerisinde zaten implemente edilmiş durumda ve varsayılan olarak true değeri atanmış durumda. Böylece multithread uygulamalarda da lazy sınıfının sarmaladığı sınıf sadece bir kez örneklenmektedir. Lazy<T> sınıfının constructo rlarına baktığımızda bu özelliği opsiyonel olarak false değerine çekebildiğimizi görmüştük. Bunun nedeni ise tek  thread üzerinde çalışılacağının garanti olduğu durumlarda bu threadsafe mekanizmasının devre dışı bırakılmasıyla bir performans kazanımının elde edilebilmesidir. 

Gördüğümüz üzere Lazy sınıfı özellikle yüksek miktarda bellek kaplayacak olan sınıfların örneklenmesinde oldukça etkin bir mekanizma sağlamaktadır. Örneğin içerisinde Picture, Stream gibi sınıfları barındıran sınıfların örneklendirilmesinde Lazy sınıfının kullanılmasının oldukça yararlı olduğunu düşünüyorum.

Görüşmek Üzere,

 

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS Yorum Takibi
Share