Merhaba arkadaşlar,Stopwatch
Stopwatch, genel itibari ile bir prosesin başlangıçtan bitişe kadar geçen işlem süresini ölçmek için kullanılmaktadır. Farklı yöntemlere göre işlem süresi baz alınarak kod optimizasyonu yapmamızı ve farklı yöntemleri performans yönünden benchmark etmemize yardımcı olur. Nesneye ait özelliklere ulaşmak için aşağıdaki MSDN linkine bakabilirsiniz.
Örneğimizde iki farklı yöntemi benchmark yapacağız. Elimizde bir sayı koleksiyonu var ve biz bu koleksiyonun elemanlarını bir Console uygulaması ile ekrana yazdırmak istiyoruz. Koleksiyon elemanlarını yazdırmak için bir döngü işlemine ihtiyacımız var. Öncelikle bir For döngüsü ile ekrana yazdırmayı deneyelim.
static void Main(string[] args) { List< int> numbers = new List< int>(); for (int i = 1; i <= 1000; i++) numbers.Add(i); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < numbers.Count; i++) { Console.WriteLine(numbers[i]); Thread.Sleep(10); } stopwatch.Stop(); Console.WriteLine($"Time elapsed (For): {stopwatch.Elapsed}"); Console.ReadLine(); }
For döngüsü ile işlem başlangıç bitiş süresini hesapladık. Kodu farklı yöntemler ile optimize etsek daha performanslı bir sonuç elde edebilir miyiz ? Bunu görmek için Parallel.For yapısına göre kodumuzu revize edelim ve Stopwatch ile süreyi hesaplayalım.
static void Main(string[] args) { List< int> numbers = new List< int>(); for (int i = 1; i <= 1000; i++) numbers.Add(i); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Parallel.ForEach< int>(numbers, x => { Console.WriteLine(x); Thread.Sleep(10); }); stopwatch.Stop(); Console.WriteLine($"Time elapsed (Parallel For): {stopwatch.Elapsed}"); Console.ReadLine(); }
Her iki yapıya göre işlem sürelerini baz aldığımızda, Parallel.For yapısının daha iyi bir performans sunduğu görülmektedir. Artık kodumuzu Parallel.For yapısına göre değiştirebiliriz. Konunun başında belirttiğim gibi, Stopwatch sayesinde farklı işlem yapılarını, kod bloklarını bu şekilde süre bazında ölçebilir, yapıları benchmark edebiliriz.
Başarılar dilerim.