For etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
For etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Mayıs 2012 Salı

C#'da Connection Pooling

Merhaba sayın arkadaşlar bu makalemde kodlarımıza biraz takla attırıcaz.Connection Pooling meselesi üzerinde durucaz.Şimdi Pool havuz demek arkadaşlar.Elimizde bir havuzumuz var . Connection kelimesini açmaya gerekte pek görmüyorum .Bir bağlantı havuzumuz var ve bağlantılarımızı aslında farketmeden bunun üzerinden kuruyoruz bunları biliyormuydunuz?Bilmiyorsanızda artık kafanızda biraz kıvılcım oluşmuştur arkadaşlar.Bir hikaye geldi aklıma hepimizin bildiği yada bilmediği bisiklet kullanmak.Ben biliyorum öğrenene kadar uğraşmıştım baya ama sonunda iyi denebilcek seviyede kullanabiliyorum.Bir kere öğrendikten sonra tekrar öğrenme gibi bir çabaya girmedim doğrusu elimde değil.Aynı şekilde yüzmede 1 kere öğrenebilir.Sonra sıkıntı çekmeden her sene yüzer geçersiniz.Connection Pooling de buna benzer bir tavır sergiler arkadaşlarım.Hani beynimiz nasıl yüzme becerisini edindiğinde bunu unutmuyor.Belleğimizde bunu unutmuyor.Bu sefer diyelim bir bağlantımız var elimizde onu açıp kapattığımızda hız artışı sağlıyor.Bir örnek üzerinde deneyelim arkadaşlar.


            listBox1.Items.Clear();
            SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=False");
            DateTime dtBaslangic = DateTime.Now;
            for (int i = 0; i < 1000; i++)
            {
                con.Open();
                con.Close();
            }
            listBox1.Items.Add((DateTime.Now - dtBaslangic).TotalMilliseconds.ToString());

Örnekte 1000 tane bağlantımı açıp kapattım.5 saniyemi aldı beklemesi biraz sıkıcı oldu.Belkide başınıza hiç gelmemiştir bunun nedeni Default olarak Pooling True gelmesindendir.Başka Defaultlarıda vardır.Bunları birkaç örnek sonra sizlere göstericem.
Örnekte Başlangıcı DateTime.Now diyerek alıyorum ve bitişinde de tekrar anı yakalayıp başlangıç saatimi ondan çıkarıyorum sonucunda detaylı görülebilmesi için milisaniye cinsinden listboxıma aktarıyorum.Burda Pooling Değerimi True yaptığımda ise inanılmaz bir fark oluyor arkadaşlar.Resimlerle göstereyim.




Resimleri pek güzel kesip parçalayamadım ama üstteki False olan milisaniye cinsinden büyük bi zaman farklı olmuş arkadaşlar.Alttakinde ise zaman çok az geçmiş çok hızlı bir şekilde bağlantı işlemlerini gerçekleştiriyor. 

Bir başka bilinçli olarak kullanmadığımız özelliğine daha değinicem arkadaşlar aslında gizliden gizliye bizi bu max pool size diye kısıtlıyor.Default olarka Maximum Açık Bağlantı Sayımız 100 dür arkadaşlar.Kapatmadığımızda bağlantılarımızı ve açmaya devam ettiğimizde maximum sayıya ulaştığımız ve geçmeye çalıştığımız taktirde hata alırız.Sevdiğim bir söz var bir makalede okuduğum.Database bağlantılarında durumumuz şöyle olmalı "mümkün olduğunca geç bağlan,erken çık".
Bir tane deneme yapalım bağlantıları kapatmayıp patlayalım arkadaşlar.



            for (int i = 0; i < 1000; i++)
            {
                SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=True;max pool size=50;");
                con.Open();
            }


Patladığımın resmini görüyorsunuz arkadaşlar. Visual Studio burda bana kızıyor.Bağlantı açmışım kapatmamışım maximum 50 tane bağlantı kurucam demişim.ama ben 1000 tane kurmaya çalımışım.Burası çok önemli arkadaşlar çünkü açtığımız her bağlantıyı kapatmamız gerekli.Her açık bağlantı sistem kaynağından tüketir.O zaman şu soru geliyor benim aklıma max pool size ı arttıralım geçelim.Arttıralımda her güzel şeyin birde kötü tarafı vardır arkadaşlar . Burda Connection Pooling işlemi kullanıyoruz ve bu bizim belleğimizden yiyor.Projemizin yapısına göre ihtiyaca göre Pooling sayısını ayarlamalıyız.Ayarlamadık diyelim en ve en önemlisi açtığımız tüm bağlantıları işleri bittiği zaman kapatmalıyız.

Open() ve Close() olaylarını biliyoruz üstünde durmuycam arkadaşlar.Birde Dispose() olayı var tam olarak kurtulmak istiyorsak tam olarak derkende Close()'dan birkaç adım öteye gider .Bağlantının durum bilgisini ve bağlantının bazı özelliklerinide temizler.Şimdilik bilgim dahilinde olan kısım bu kadar arkadaşlar.

Makalem umarım yardımcı olmuştur.Beni Takip etmeye devam edin !

30 Nisan 2012 Pazartesi

C# Örnekleri - Otobüs Koltukları

Selam millet bu makalemde sizlerle bir windows kontrolü yaratma , özelliklerini belirleme ve forma yerleştirme işlemleri üzerinde durucam.Bunun için bir otobüs'ün koltuk dizilimini örnek olarak kullanıcam.


Evet arkadaşlar Kodlarımız çalıştığında Ekran görüntüsü bu şekilde olucaktır kodlara geçicek olursak.


var sayac = 0;
            for (int j = 1; j < 14; j++)
            {
                for (int i = 1; i < 6; i++)
                {
                    if ((i == 3 && j != 13) || (j == 7 & i > 2))
                        continue;

                    Button btn = new Button();//Yeni Bir Buton
                    btn.Text = (++sayac).ToString();
                    btn.Size = new Size(40, 40); //Butonun Boyutunu Ayarlar.
                    btn.Location = new Point(40 * i, 40 * j); //Butonun Yerini ayarlar.
                    btn.BackColor = Color.White;
                    this.Controls.Add(btn); //Oluşan btn Nesnesini Form’a ekler.


                }

Kodlarda gayet açık arkadaşlar.İç içe 2 tane döngümüz var.İf içerisinde de koltuk eklenmemesi gereken durumlar mevcut eğer şart sağlanıyorsa  continue diyip  Button yaratmıyor.Okuduğunuz için teşekkürler.

9 Nisan 2012 Pazartesi

C# Algoritma Örnekleri - Asal Sayı

Bir Sayının Asal Olup Olmadığını Bulma.
        
        static void Main(string[] args)
        {
            Console.WriteLine("Bir sayı giriniz.");
            int deger = Convert.ToInt32(Console.ReadLine());
            bool durum = false;
            for (int i = 2; i <= deger / 2; i++)
            {
                if (deger % i == 0)
                {
                    durum = true;
                    break;
                }
            }
            if (durum)
            {
                Console.WriteLine("Girilen sayı asal değildir");
            }
            else
            {
                Console.WriteLine("Girilen sayı asal sayıdır");
            }
            Console.ReadKey();
       }

4 Nisan 2012 Çarşamba

C#'da Döngüler - 1

For Döngüsü

Yazımda döngü yapılarından biri olan For yapısı hakkında bilgi vericem.Döngü nedir ?? Adı üstünde döngü yani bir başlangıç ve bitiş noktası vardır ve bu noktalar arasında tekrar eder.Şöyle düşünürsek hayatımızdan bir günü ele alalım.Sabah uyanınca gün içindeki döngü başlar taki akşam yatağa girip uyuyana kadar .Her gün içerikte farklı işlerimizi yapsakta sonuç yine aynıdır tekrar etmek ve sadece tekrar etmek.

    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }
    }

Örnekte basit bir for döngüsü var.Örnek üzerinden gidicek olursak for döngüsü başladığında 3 adet yapı vardır.İlk yapımız döngü değişkeni döngüdeki başlangıç değerini belirtir "int i = 0;".İkinci yapımız ise döngü değişkenin maximum alabileceği değer ile ilgilidir "i < 10;".Üçüncüsü ise döngü değişkenimizin artış oranıdır "i++".Bu değer artabileceği gibi azalabilirde.
For kelimesinin Türkçe karşılığı "için" kelimesine denk düşer.Belirttiğim gibi i değişkenini döngü değişkeni olarak tanımladım.For i değişkeni için çalışır.Örneğimizdeki for döngüsü i'nin alıcağı 0 değeri için , 1 değeri için , 2 değeri için...... taki i değeri ikindi parametrede belirlenen koşula gelene dek devam eder.


Resimde ilk for örneğimizin ekran çıktısını görüyoruz. For döngüsünün i için aldığı değerler ve parametre olarak atadığımız i<10 değerine kadar dönmesi.

Farklı bir örnek daha yapmak istiyorum arkadaşlar.Bu seferki örnekte sayı kullanmıycam.Yapmak istediğim örnekte 'a' dan 'z' kadar olan harfleri console ekranında göstermek istiyorum.

            for (char harf = 'a'; harf <= 'z'; harf++)
            {
                Console.WriteLine(harf);
            }

Döngümüzde başlangıç değeri olarak 'a' harfini verdik ve 'z' harfine kadar dönmesini istedik.


Ekran çıktımızda yazdığımız koda karşılık gelen bir görüntü servgileniyor ve sorunsuz çalışıyor.Döngüler oldukça geniş bir konu olduğu için önce tüm döngüleri bitirip ardından daha fazla örnek vermeye çalışıcam.