Debugging esnasında Performans Analizi
Çoğu yazılımcı, genellikle yazmış olduğu kodun nasıl çalıştığına bakmaz. Kodun çalışıp doğru data’yı vermiş olması onun için yeterlidir. Performansa odaklanmak aslında kod yazarken en az yapılan şeylerden birisidir. Bunu alışkanlık haline getirirseniz bir zaman sonra artık yazdığınız kodların ne kadar performanslı çalıştığını anlayamayabilirsiniz.
Debugging nedir, neden yapılır, yöntemleri nedir gibi konuları burada ki yazımızda incelemiştik.
Kod’unuz çok hızlı çalışıyor görünebilir, pürüzsüz bir kod yazmış olabilirsiniz, bu, analiz etmeye gerek yok anlamına gelmemektedir. Aksine analiz edip yazmış olduğunuz kod’un ne kadar sürede çalıştığını ölçmeniz gerekiyor. Basit bir yöntem ile Run-Time çalışma süresini bulmanızı sağlayan System.Diagnostics.StopWatch’ı kullanabilirsiniz. Start-Stop komutları arasında kod blogunuzun çalışma süresini milisaniye bazında ölçebilirsiniz.
Hadi biraz derin dalış yapalım.
Diagnostic Tools
Çoğu yazılımcının isim olarak bildiği fakat genellikle açıp da bakmadığı bir araçtır. Tabii ki kullananlar da vardır onları hariç tutuyorum :)
Peki nedir bu Diagnostic Tool? Bize ne sunuyor da bu kadar önemli?
Diagnostic Tools, projemizin çalışma anında kaynak tüketimini Real-Time olarak monitör edebilmemizi ve yanında bir çok Event’ları takip etmemize olanak sağlıyor. Bellek ve CPU kullanımlarını bir kaç yöntemle izleyelim hemen.
Performans ve Bellek Sorunlarının Tespiti
Performans sorununu yakalayabilmeniz için, kodunuzun nerede iyileştirmeye ihtiyacı olduğunu bilmeniz size kolaylık sağlayacaktır. PerfTips kullanarak kodunuzun nerede ne kadar sürede çalıştığını öncelikle takip etmelisiniz.
PerfTips, BreakPoint koyduğunuz satırı F10 ile geçtiğiniz anda bir sonraki satırın sağ tarafında çıkan ve size “BreakPoint koyduğun satır bu kadar sürede çalıştı” diyen bir özelliktir.
Bu süre, I/O üzerinde bekletilen sürenin toplamı olarak hesaplanmaktadır ve ya CPU’nun kodu çalıştırması için harcanan zamana tekabül etmektedir.
Uygulamanın akışını değiştirerek sarı ok’u yukarı çekip tekrar F10 yaptığınızda süre değişebilir. Bir kaç defa denediğinizde farklı süreler alabilirsiniz. CPU’dan geçen kodların yoğunluğu gibi etkenler de bulunmaktadır.
CPU ve Memory grafikleri üzerinde belirlenmiş bazı noktalar bulunmaktadır. Bu kırılımlar ani çıkış ve ya ani iniş gibi durumlarda oluşur. Daha net bir takip yapabilmeniz için bu kırılımları size monitör etmiş oluyor. Üzerine geldiğinizde Süre ve İşlemin oranını gösteren bir tooltip açılıyor. Burada detaylı olmasa da ufak bir ön izleme yapabilirsiniz.
Peki CPU Kullanımını Nasıl Azaltırım?
CPU Usage kısmında Record CPU Profile seçimini aktifleştirdiğinizde belirli bir miktar CPU’a yük binecektir fakat bu MiliSaniye bazında farkedecektir.
CPU’u görüntülemenin en iyi yolu Record CPU Profile’i aktif edip, çalıştırılacak kod blogunun başlangıç ve bitiş noktasına BreakPoint eklemek ve çalıştırmak.
Kod blogunu F5 ile çalıştırdığımızda PerfTips bize 197ms’den kısa sürede çalıştığınız söylüyor.
Peki Record CPU Profile ne açıklıyor bize?
Call edilen tüm alanları tek tek kayıt altına alıyor ve toplu bir şekilde gösteriyor. Toplam CPU alanında kırılımları toplayarak görmemizi sağlar.
Birbirini tekrarlayan birden fazla işlem var mı? ve ya gereksiz bazı kod blokları kullanılmadığı halde CPU’yu zorluyor mu? bu gibi sorularınıza buradan yanıt alabilirsiniz.
Karşılaştığım enteresan bir olayı da paylaşmak istiyorum. Bir kaç sene önce bir developer tarafından yazılan bir kodu Code Review ederken gözüme bir şey çarptı ve bunun kaynak tüketimini artıracağını ve gereksiz IO yapacağını düşündüm. Debugging yaparak CPU ve Memory kullanım oranlarını kontrol ettim. Yanılmamışım kaynak tüketimi normalin üzerinde.
Pair Programming’e inanan birisi olarak arkadaşımızın yanına giderek, bu durumdan bahsettim ve kendisinin bunu görebilmesi için onun bilgisayarında denememiz gerektiğinden bahsettim. Yazmış olduğu kod blogunun başına Break Point koydu ve F5 yaparak projeyi çalıştırdı. Ben CPU ve Memory kontrollerini yapacağını düşünürken F5 yaptı ve sayfa Chrome’da açıldı. Bana döndü ve” çok hızlı, ben bir sorun görmedim” dedi.
Haklıydı, Debugging kısmını çok hızlı geçmişti. PerfTips’leri kapalıydı, Diagnostic Tools Disable moddaydı. CPU ve Memory takibi yapmak imkansızdı. Neden Performans takibi tool’ların kapalı sorusunu yöneltim.
“Debug yaptığım da çok yavaş çalışıyordu ben de kapattım” dedi.
Bir sonra ki yazımda Bellek Yönetimi’ne derin dalış yapabiliriz.
Görüşmek Dileğiyle…