.Net 4.0 Evreni - .Net 4.0 Universe

.Net 4.0 Evreni

Microsoft .Net Framework ailesinin en yeni üyesi olacak 4.0 versiyon için aşağıdaki PDF dokümanını yayınladı.

PDF Formatında indirmek için buraya tıklayınız.

Sql Server 2008'de Çoklu Insert İşlemi

Sql Server 2008 ile birlikte Çoklu Insert (Multiple Insert) özelliği de hayatımıza giriyor.

Microsoft bu özelliğin altında yatan tekniğe, “Table Value Costructor” adını vermiş.

Çoklu Insert (Multiple Insert) özelliği sayesinde Insert yapan DML cümlelerinde, birden fazla satırı işleme tabi tutabiliyoruz.

AdventureWorks 2008 veritabanında bulunan HumanResources.Department tablosunda bu özelliği nasıl kullanabileceğimizi bir örnek ile inceleyelim;

INSERT INTO HumanResources.Department VALUES (‘İnsan Kaynakları’, ‘IK’, GETDATE()), (‘Bilgi İşlem’, ‘IT’, GETDATE()), (‘Muhasebe’, ‘MUH’, GETDATE()), (‘Finans’, ‘FIN’, GETDATE()), (‘Lojistik’, ‘LOJ’, GETDATE()), (‘Kalite ve Eğitim’, ‘KVE’, GETDATE())

Kısa Sınav - 11

Yazdığınız uygulamanın bir yerinde, kullanıcının önüne otomatik olarak IkinciUygulama.exe isimli başka bir programı otomatik olarak açtırmak istiyorsunuz.

Uygulamanızın, kullanıcının IkinciUygulama.exe uygulamasını kullanmasını ve kapatmasını beklemesi gerekmektedir.

Aşağıdaki seçeneklerden hangisi bu işi tam doğru olarak gerçekleştirir?

  • Process p = new Process(); p.StartInfo.FileName = “IkinciUygulama.exe”; p.Start(); p.WaitForExit(10000);</pre>

  • Process p = new Process();
    p.StartInfo.FileName = "IkinciUygulama.exe";
    p.Start();
    p.WaitForExit();
  • Process p = new Process("IkinciUygulama.exe");
    p.Start();
    p.WaitForExit(10000);
  • Process p = new Process("IkinciUygulama.exe");
    p.Start();
    p.WaitForExit();

Sorunun doğru cevabı için; Doğru cevap :

Process p = new Process();
p.StartInfo.FileName = "IkinciUygulama.exe";
p.Start();
p.WaitForExit();

*Process* class'ının **constructor**'ı parametre almamaktadır. Çalıştırılacak uygulamanın yolu *StartInfo.FileName* **property**'si ile verilmelidir.

*Start()* method'u ile çalıştırılan **process**'in tamamlanmasının beklenilmesi gerektiği durumlarda *WaitForExit()* method'u parametresiz kullanılır.

*WaitForExit()* fonksiyonu *int* parametre ile çağırılırsa, *int* değişken ile belirtilen süre sonra (**milisaniye cinsinden**) uygulama, çalıştırılan uygulamanın kapatılmasını beklemeden çalışmaya devam eder.

String tipinde değişkenin hafızada kapladığı alan

Hangi .Net yazılımcısına sorsanız, string tipinde değişkenin hafızada kapladığı yeri hesaplamak için, karakter sayısını 2 ile çarpmak gerektiğini söyler (UTF-8 kodlama).

Genel olarak kabul gören bu hesaplama yöntemi, birçok durumda gerçeğe çok yakın sonuç üretir. Fakat sonuç tam olarak doğru değildir.

UTF-8 (Unicode Transformation Format) hakkında daha fazla bilgiyi Wikipedia‘da yeralan şu makale‘den edinebilirsiniz.

Peki string değişkenin hafızada kapladığı alanı tam olarak nasıl hesaplayacağız?

string OrnekString = “ἄλφα βῆτα γάμμα δέλτα deneme test”; MessageBox.Show(“Uzunluk * 2: “ + OrnekString.Length * 2 + “ Byte”); MessageBox.Show(“Gerçek uzunluk: “ + Encoding.UTF8.GetByteCount(OrnekString).ToString() + “ Byte”);

OrnekString.Length * 2: 66 Byte değerini üretirken,

Encoding.UTF8.GetByteCount(OrnekString): 53 Byte değerini üretmiştir.

String değişkenlerin hafızada kapladığı alanı tam olarak hesaplamanız gerektiği durumlarda, Encoding.UTF8.GetByteCount() fonksiyonunu kullanmanızı öneririm.

Listede Filtreleme Yapmanın İyi - Kötü - Çirkin Yolu

Bütün gün, dizilerde filtrelemeler yaptıktan sonra, bu konu ile ilgili bir yazı yazmaya karar verdim. Elimizde bir List<int> olsun, dizideki 0‘dan büyük rakamları döndüren fonksiyon yazmak istediğimizi varsayalım;

Önce Kötü Yol;

private static List<int> FiltrelemeninKotuYolu(List<int> t) { List<int> arrReturn = new List<int>(); foreach (int i in t) { if (i > 0) { arrReturn.Add(i); } } return arrReturn; }</pre> Umarım artık böyle kodlar yazmıyorsunuzdur!!..

Çirkin Yol;

Önce bir Predicate Function tanımlarız;

private static bool Karsilastir(int i)
{
    if (i > 0)
    {
        return true;
    }
    return false;
}

Sonra, Predicate Function‘ı kullanırız;

private static List<int> FiltrelemeninCirkinYolu(List<int> t)
{
    Predicate<int> pred = new Predicate<int>(Karsilastir);
    return t.FindAll(pred);
}

Kötü Yol‘dan daha doğru olduğu ortada, ama Güzel bir yol değil.

Son olarak İyi Yol;

private static List<int> FiltrelemeninIyiYolu(List<int> t)
{
    return t.FindAll(n => n > 0);
}

**İyi Yol** aslında sadece **Çirkin Yol**'un iyileştirilmiş hali. *Predicate Method* kullanacağımıza *Lambda Expression* kullanıyoruz. *n => n > 0* : **n**'nin **0**'dan büyük olduğu durumlar anlamına geliyor.

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 458

Creative Commons Lisansı