Kısa Sınav - 13

Geliştirdiğiniz bir Windows Forms uygulamasında aşağıdaki depolar.xml dosyasına sahipsiniz;

<? xml version=”1.0” encoding=”utf-8” ?> <Depolar> <Depo Adi=”DP001” Sehir=”İstanbul”></Depo> <Depo Adi=”DP002” Sehir=”Ankara”></Depo> <Depo Adi=”DP003” Sehir=”Adapazarı”></Depo> <Depo Adi=”DP004” Sehir=”Elazığ”></Depo> <Depo Adi=”DP005” Sehir=”İzmir”></Depo> </Depolar>

Bu Xml dosyasındaki depo isimlerini bir combobox‘a doldurmanız gerekmekte.

Sizce hangi yol tercih edilmeli?

  • Xml dosyasının şeması ile aynı serilize olabilen bir class geliştirilmeli. Geliştirilen class XmlDataDocument class’ı ile birlikte kullanılmalı
  • ApplicationSettingBase class’ından inherit olan yeni bir class yazılmalı
  • Xml dosyasının şeması ile aynı serilize olabilen bir class geliştirilmeli. Geliştirilen class XmlSerializer class’ı ile birlikte kullanılmalı
  • ConfigurationSection class’ından inherit olan yeni bir class yazılmalı

Sorunun doğru cevabı için; Doğru cevap, Xml dosyasının şeması ile aynı serilize olabilen bir class geliştirilmeli. Geliştirilen class XmlSerializer class’ı ile birlikte kullanılmalı olmalı.

.Net Framework serilizasyonu, Xml verisini aynı şemaya sahip class’a doldurmak için en kullanışlı yöntemdir.

XmlDataDocument class’ı Xml verisini class içerisine deserilize etmek için yöntemlere sahip değildir.

ApplicationSettingBase ve ConfigurationSection class’ları bu problem ile alakasızdır.

C# ile Uygulama Geliştirirken Yorum Satırlarını Kullanmak

Bu yazımda aslında çok kolay bir konuyu işliyor olacağım, C# kodunuza yorum satır(lar)ı eklemek.

Bu konuyu yazmamdaki asıl amacım, BilgeAdam‘daki öğrencilerim için hatırlatma niteliğinde olmasıdır.

C# geleneksel C-tarzı yorum satır(lar)ını destekler; (// …) veya (/* … */)

// Bu satır örnek olarak yorum haline getirilmiştir. / Bu satır örnek olarak yorum haline getirilmiştir. /

Tek satır yorum operatörünün (//) satırda buluduğu noktadan satırın sonuna kadar herşey yorum olarak kabul edilir.

Çok satır yorum operastöründe (/* /**), *başlangıç operatöründen (/) *bitiş operatörüne (*/) kadar herşey **yorum olarak kabul edilir.

Tek satırlı ve çok satırlı yorumlar şu şekilde yazılabilir;

// Tek satırlı yorum / Bu satırlar çok satırlı yorum için iyi bir örnektir. /

Aşağıdaki kod’da geçerlidir;

Console.WriteLine(/* İşte yorum! */ “Kodun burası derlenir.”);

Aynı zamanda aşağıdaki gibi kodlar sayesinde, satır içerisinde kod parçalarına yorum yazabilmek mümkündür;

EkranaCiz(Boy, /* Yukseklik */ 250);

Tabiki string karakterleri arasındaki yorum operatörleri, normal karakter olarak değerlendirilecektir;

string mesaj = “/ Bu normal bir metin değişkenidir /”;

Kısa Sınav - 12

Kod yazma yeteneklerimizi ölçebileceğimiz sitelerden Codility‘de test olarak yapabileceğiniz bir soru bulunuyor. Aşağıdaki görselde soruyu görebilirsiniz.

Codility sitesinde yayınlanan demo test

Benim çözümüm devam eden sayfada. Sizde çözümünüzü yazın bakalım.

int equi ( int[] A ) { Int64 ilkYari; Int64 sonYari; for (int iLoop = 0; iLoop < A.Length; iLoop++) { ilkYari = 0; sonYari = 0; for (int yLoop = 0; yLoop <= iLoop; yLoop++) ilkYari += A[yLoop]; for (int zLoop = iLoop; zLoop < A.Length; zLoop++) sonYari += A[zLoop]; if (ilkYari == sonYari) return iLoop; } return -1; }

Sql Server İstatistiklerin Son Güncellenme Zamanını Bulma

İstatistikler, verinin veritabanı nesnelerinde (tablo, index, vs) nasıl dağıldığı bilgisini içerdiği için, veritabanında en önemli nesnelerden biridir.

Veritabanı Yöneticilerinin (Database Administrators) eskimiş istatistiklerden şikayetlerini çok duydum. Yapılması gereken istatistikleri güncellemektir.

Eğer bir tablodaki indexlere ait istatistiklerin son güncelleme zamanını öğrenmek istiyorsanız, aşağıdaki sql sorgusunu çalıştırabilirsiniz;

SELECT NAME AS INDEX_ADI, STATS_DATE(OBJECT_ID, INDEX_ID) AS SON_GUNCELLEME FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID(‘HumanResources.Department’)</pre> Eğer tüm indexler için aynı bilgiyi almak istiyorsanız, WHERE filtresini kaldırmanız yeterli.

Benim test bilgisayarımda aldığım sonuç;

*PK_Department_DepartmenID* **2010-01-20 15:30:17:200** *AK_Department_Name* **2010-01-20 15:30:26:053**

Eğer istatistiklerinizin zamanı geçmiş olduğunu düşünüyorsanız ve güncellemek istiyorsanız, aşağıdaki sql komutunu çalıştırabilirsiniz;

UPDATE STATISTICS HumanResources.Department

Bu komutu çalıştırdığınızda ilgili tablonun istatistik verilerinin güncellendiğini göreceksiniz. Eğer komutu WITH FULLSCAN komutu ile birlikte çalıştırırsanız, tablodaki tüm kayıtlar baştan taranacak ve istatistik baştan oluşturulacaktır.

UPDATE STATISTICS HumanResources.Department
WITH FULLSCAN


***Dikkat :** İstatistikleri güncellemek için yukarıdaki komutları, sadece istatistiklerinizin gerçekten eskimiş olduğuna inandığınızda, sorgularınız için oluşturulan query plan'ların hatalı olduğunu gördüğünüzde ve sql server'ın yoğun olmadığı zamanlarda çalıştırmanızı tavsiye ederim.*

Kendi test bilgisayarımda, istatistik güncelleme komutunu çalıştırdıktan sonra, aşağıdaki sonuçları elde ettim;

`*PK_Department_DepartmenID* **2010-01-30 21:10:06:560**
*AK_Department_Name* **2010-01-30 21:10:06:594**`

Gördüğünüz gibi, ilgili tablodaki indexlerin istatistikleri güncellendi.

LINQ ile Dosya Sisteminde Sorgulama Yapmak

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.

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 458

Creative Commons Lisansı