Makale Özeti

Visual Studio 2008 Team Suite’deki “Analyze” menüsü bu sürüm ile gelen yeni özellikleri içeriyor. Bunlardan kanımca en önemlilerinden biri olan Performance Wizard (Türkçesi herhalde “Verim Sihirbazı” olur) konusunda bilgi vermeyi amaçlıyorum.

Makale

Visual Studio 2008 Team Suite ile kod verimliliği üzerine çalışma: Performance Wizard

 
Visual Studio 2008 Team Suite’deki “Analyze” menüsü bu sürüm ile gelen yeni özellikleri içeriyor. Bunlardan kanımca en önemlilerinden biri olan Performance Wizard  (Türkçesi herhalde “Verim Sihirbazı” olur) konusunda bilgi vermeyi amaçlıyorum. Makalem başlangıç düzeyinde olacaktır, detay bilgiyi daha sonraki makalelerde vermeyi planlıyorum.
 
Bütün kod geliştiren kişiler zaman içinde uygulamalarında yavaşlık gözlemleyebilirler. Bu yavaşlığın iki sebebi olabilir; kod içinden erişilen diğer kaynaklardaki sorunlar veya kod içinde bulunan döngüler ve yanlış kodlama yöntemleri.
 
Verim Sihirbazı bu iki durumu gözlemleyebileceğiniz araçlar sunuyor. Bu kısımda öncelikle “Instrumentation” yöntemi üzerinde duracağım.
 
Örneğimiz aşağıdaki basit konsol uygulamasından oluşuyor.
namespace PerformanceApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            YavasIs();
 
            for (int i = 0; i < 10; i++)
            {
                DahaYavas();
            }
        }
 
        private static void YavasIs()
        {
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(300);
            }
        }
 
        private static void DahaYavas()
        {
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(50);
            }
        }
    }
}
 
Öncelikle Analyze menüsünden Launch Performance Wizard menü adımını seçiyoruz. Karşımıza 3 adımlı bir görev sihirbazı çıkıyor:
1.    İlk ekranda solution içerisindeki projeleri içeren bir liste geliyor. Bu listeden herhangi bir projeyi seçebilirsiniz. Çoğunlukla ASP.Net veya executable(Exe) projelerininde izleme yapılacağını düşünüyorum. Örneğimizde PerformanceApplication’ı seçip Next tuşuyla devam edin.
2.    İkinci ekranda Sampling ve Instrumentation seçimleri var, sampling daha uzun izleme senaryoları için kullanılabilir ama daha az veri toplar, Instrumentation daha fazla veri toplar. Biz burada Instrumentation seçip devam tuşuna basıyoruz.
 

3.    Bilgilendirme sayfasıdır, Finish tuşuna basıp sonlandırın.
 
Sonuç olarak Performance Explorer adında bir ekran açılır. Bu ekranda ilk başta Target olarak seçtiğimiz proje ve raporların görüntülendiği bir ağaç yapısıdır.


Uygulamayı PerformanceApplication üzerinde sağ mouse tuşunda gelen menüde Launch with Profiling seçerek başlatıyoruz.


Output ekranına dikkat ederseniz Performance Explorer ekranında Projeniz açılırken oluşturulan dll’ler yedeklenir ve instrumentation yapılacak yeni dll imajları oluşturulur. Bazı küçük fonksiyonlar gözardı edilebilir, bunları sonuç raporunda göremeyebilirsiniz. Profiling yaptığınız sürece aspx sayfası veya windows ekranlarında yapılan her türlü işlemi veya konsol uygulamanızın akışı süresince çalışan bütün metodlar boyunca kayıt alır ve uygulamayı kapattığınızda bir rapor oluşturarak ekranda gösterir.


İlk bakacağımız yerlerden birisi özet ekranı. En fazla çağırılan metodlar, ne fazla zaman alan metodlar burada listelenir. Daha sonra Current view’dan Functions’ı seçin. Burada da bütün fonksiyonlar çalışma zamanları, çalışma zaman yüzdeleri, çalışma sayıları şeklinde detay veri olarak gözlemlenebilir.
 
Functions ekranındaki kolonları açıklaması için ekteki adresi inceleyebilirsiniz. http://msdn.microsoft.com/en-us/library/ms242747.aspx
 
Benim Functions ekranında en çok kullandığım birkaç kolon var.
1.    Elapsed Exclusive Time %: Metodun çalışmasında kullanılan % zaman.
2.    Elapsed Inclusive Time %: Metodun ve altındaki diğer metodların çalışmasında kullanılan % zaman.
3.    Elapsed Exclusive Time: Metodun çalışmasında kullanılan toplam zaman.
4.    Elapsed Inclusive Time: Metodun ve altındaki diğer metodların çalışmasında kullanılan toplam zaman.
5.    Number of Calls: Metodun kaç defa çalıştırıldığı
 
Elapsed Exclusive Time % sıralanarak en çok zaman alan metodlar gözlemlenebilir. Eğer bir metot programın toplam çalışma süresinin çok büyük kısmını kullanıyorsa burada bir sorun olabilir. Hedef olarak ilk 5 satırı inceleyin ve bunların zamanlarını azaltmaya çalışın. İkinci işlem olarak Number of Calls kolonunu azalan olarak sıralatın, eğer bir metot çok fazla çağırılıyorsa burada da bir problem söz konusu olabilir.
 
Örneğimizde bizim Sleep metodunu çok fazla kullandığımız ve programın % 99,9 oranında bu fonksiyonu çalıştırdığı ortaya çıkıyor. Baş sorumlumuzu bulduk! Esas olarak 110 defa çağırılan bu metot ve 10 defa çağırılan ve toplam 8 saniyelik sürenin 5 saniyesini harcayan DahaYavas metodu üzerine çalışma yapmamız gerekmektedir.
 
 
Özet olarak Verim Sihirbazı ile yavaş çalışan işlerimizin içine bakma fırsatı yakalıyoruz. Bir sonraki makalede daha ileri yöntemleri nasıl kullanabiliriz bunu inceleyeceğiz.

İyi günler
 
Cenk Okan ÖZPAY