Geliştirmekte olduğumuz uygulamalarda performans analizi yapmak için genellikle Stopwatch sınıfını kullanırız.
Aşağıdaki sınıf’ı kullanarak uygulamanın her method‘unu kolay analiz edebiliriz;
public class PerformansAnaliz
{
public TimeSpan ToplamSure { get; private set; }
public TimeSpan OrtalamaSure { get; private set; }
public static PerformansAnaliz Yeni()
{
return new PerformansAnaliz();
}
public void Olcumle(Action Method, int TekrarAdet = 1)
{
var sw = Stopwatch.StartNew();
for (int iLoop = 0; iLoop < TekrarAdet; iLoop++)
{
Method();
}
sw.Stop();
OrtalamaSure = new TimeSpan(sw.Elapsed.Ticks / TekrarAdet);
ToplamSure = sw.Elapsed;
}
}
C#, Programlama
action, elapsed, for, method, new, performance, performans, private, public, return, startnew, static, stopwatch, ticks, TimeSpan, void
Euler serisinin yedinci yazısında, Project Euler’in 7. sorusunu çözeceğiz;
Orjinal Soru; By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10.001st prime number?
Türkçesi; İlk altı asal sayı: 2, 3, 5, 7, 11, ve 13, altıncı asal asal sayının 13 olduğunu görürüz.
10.001nci asal sayı kaçtır?
Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…
C#, Programlama
add, bool, class, console, Enumerable, euler, first, IEnumerable, if, int, linq, MaxValue, range, readline, return, select, skip, static, system.linq, TrueForAll
Aşağıdaki küçük fonksiyon yardımıyla string tipindeki değişkenlerin içeriğini MD5 yöntemi ile şifreleyebiliriz.
Öncelikle kodumuzun using kısmına System.Security.Cryptography namespace‘ini eklememiz lazım.
Böylece MD5CryptoServiceProvider sınıfından yeni bir örnek (instance) oluşturabilir, ve şifreleme sağlayıcısı (crypto service provider) olarak kullanabiliriz.
using System.Text;
using System.Security.Cryptography;
public static string Sifrele(string Metin)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] ba = Encoding.UTF8.GetBytes(Metin);
ba = md5.ComputeHash(ba);
StringBuilder sb = new StringBuilder();
foreach (byte b in ba)
{
sb.Append(b.ToString("x2").ToLower());
}
return sb.ToString();
}
C#, Programlama
ComputeHash, crypto, csharp, encoding, foreach, getbytes, instance, md5, MD5CryptoServiceProvider, namespace, return, string, stringbuilder, System.Secuity.Cryptography, tostring, using
Euler serisinin ikinci yazısında, Project Euler’in 2. sorusunu çözeceğiz;
Orijinal soru; Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Find the sum of all the even-valued terms in the sequence which do not exceed four million.
Türkçesi; Fibonacci serisinde her rakam, kendisinden önce gelen iki rakamın toplamıdır. 1 ve 2 ile başlayan serinin ilk 10 rakamı:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Bu serinin 4.000.000 (Dört Milyon) ‘dan küçük tüm çift rakamlarının toplamını bulunuz.
Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…
C#, Programlama
euler, fibonacci, generic, IEnumerable, lambda, long, return, static, sum, where, while, yield
Yazdığımız uygulamalarda dosya sisteminde arama yapmaya ihtiyaç duyabiliriz. Bu durumda genelde döngüler yazarız. Peki LINQ kullanamaz mıyız? Üzerinde biraz çalıştıktan ve araştırma yaptıktan sonra, aşağıdaki kodu elde ettim;
private IEnumerable<FileInfo> DosyaListesi(DirectoryInfo KokDizin, string Uzanti, string DosyaAdiParcasi)
{
foreach (var f in KokDizin.GetFiles().Where(Dosya => Dosya.Extension == Uzanti && Dosya.Name.Contains(DosyaAdiParcasi)))
yield return f;
foreach (DirectoryInfo d in KokDizin.GetDirectories())
foreach (var f in DosyaListesi(d, Uzanti, DosyaAdiParcasi))
yield return f;
}
Gördüğünüz gibi fonksiyon, parametre olarak aramaya başlanacak kök dizini, arama yapılacak dosyanın uzantısını ve dosya isminde bir parçayı alıyor, geriye FileInfo sınıfında liste döndürüyor.
İlk foreach döngüsünde kök dizinde parametre ile alınmış kriterlere göre arama yapılıyor ve yield anahtar kelimesi ile, bulunan her sonuç dönüş kümesine ekleniyor.
İkinci (ve üçüncü) foreach döngülerinde ise, recursive (kendini tekrarlamalı) olarak DosyaListesi() fonksiyonu kendi kendisini çağırarak, arama işlemini alt klasörlerde de yapıyor.
C#, Programlama
csharp, directoryinfo, döngü, extension, fileinfo, foreach, getdirectories, getfiles, linq, method, recursive, return, yield
Geçen aylarda BilgeAdam‘da bir öğrencimin sorduğu soru geldi aklıma. Soru aslında çok basit, fakat farkettim ki, internette bu konu ile ilgili pek kaynak yok. Bari kendim yazayım dedim. Soru şu;
Bir method'dan geriye true/false değer döndürmem lazım.
Method içerisine yazdığım kodları try-catch-finally blokları içerisine almam gerekiyor.
Eğer try içerisinde hata oluşmazsa, geriye true değer döndüreceğim. Hata oluşur ve kod catch bloğuna girerse false değer döndüreceğim.
Ama finally kod bloğunda yapmam gereken işler var. (Açık bağlantıları kapatmak, vs.)
Eğer try-catch içerisinde return ifadesini kullanırsam, finally bloğundaki kod çalışır mı?
Sorunun doğru cevabı için; Devamını oku…