Euler - 4

Euler serisinin dördüncü yazısında, Project Euler’in 4. sorusunu çözeceğiz;

*Orijinal soru; *A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99. Find the largest palindrome made from the product of two 3-digit numbers.

*Türkçesi; *Palindromik sayı, düz ve tersten aynı şekilde okunan sayıdır. 2 haneli rakamlar ile oluşturulabilecek en büyük palindromik sayı 9009’dur (91 ve 99 kullanılarak) 3 haneli rakamlar ile oluşturulabilecek en büyük palindromik sayıyı bulunuz.

Önce siz çözmeyi deneyin, çözemezseniz ;

using System; using System.Linq; using System.Collections.Generic;

class Program { static void Main(string[] args) { var Palindromlar = from x in Enumerable.Range(100, 900) from y in Enumerable.Range(100, 900) let carpim = x * y let carpim_duz = carpim.ToString() let carpim_ters = new string(carpim_duz.Reverse().ToArray()) where carpim_duz == carpim_ters select carpim;

    Console.WriteLine("En Büyük Palindrom: {0}", Palindromlar.Max());

    Console.ReadLine();
} }

C# Bir Windows Service'in Durumunu Belirlemek

Bir Windows Service‘ine bağımlı uygulama geliştirdiğiniz zaman, ilgili Windows Service‘in durumunu belirlemek kritik öneme sahip oluyor. Service, uygulamamızı destekleyen, kendi geliştirdiğimiz bir service olabileceği gibi, Windows ile birlikte gelen service’lerden biri de olabilir.

ServiceController Sınıfı

ServiceController sınıfı, System.ServiceProcess namespace’inde yer alır. Lokal makinadaki veya Uzak makinadaki bir windows service‘ini temsil eder, ilgili service’in sorgulanmasına ve çeşitli özelliklerinin değiştirilmesine izin verir.

ServiceController Sınıfının Kullanımı

ServiceController sınıfını projelerimizde kullanabilmek için, projemize System.ServiceProcess.dll dosyasını referans olarak eklemeliyiz.

Daha sonra, kodumuzun using kısmına System.ServiceProcess eklemeliyiz;

using System.ServiceProcess;</pre>

Lokal makinadaki bir service’in durumunu belirleme Lokal makinadaki bir service’in durumunu belirlemek için, öncelikle ServiceController sınıfından yeni bir örnek oluşturmamız lazım.

Sordulamak istediğimiz windows servis’i ile değişkenimizi ilişkilendirmek için kullanabileceğimiz üç yöntem var.

  • ServiceName özelliği
  • DisplayName özelliği
  • ServiceController constructor‘ı

Örnek olarak Print Spooler servisini sorgulamak için;

ServiceController ServiceByServiceName = new ServiceController();
ServiceByServiceName.ServiceName = "Spooler";

ServiceController ServiceByDisplayName = new ServiceController();
ServiceByDisplayName.DisplayName = "Print Spooler";

ServiceController ServiceByConstructor = new ServiceController("Spooler");

Yukarıdaki kodda görebileceğiniz gibi ServiceController sınıfımızı tanımladıktan sonra, Status özelliğini kullanarak, servis’in durum bilgisini sorgulayabiliriz.

Status özelliği ServiceControllerStatus enum tipinde değer döndürür;

  • **ContinuePending: **Servis durdurulmuş ve başlatılıyor
  • **Paused: **Servis durdurulmuş
  • **PausePending: **Servis durduruluyor
  • **Running: **Servis çalışıyor
  • **StartPending: **Servis başlatılıyor
  • **Stopped: **Servis çalışmıyor
  • **StopPending: **Servis durduruluyor

Servis’in çalıştığı durumu kontrol etmek için kodumuzu aşağıdaki gibi yazabiliriz;

ServiceController sc = new ServiceController("Spooler");

if (sc.Status == ServiceControllerStatus.Running)
{
    MessageBox.Show("Servis çalışıyor");
}

Not: Servis durumunu sorgulayan uygulamayı çalıştıran kullanıcının yeterli yetkisi bulunmalıdır. Aksi taktirde bir hata fırlatılacaktır.

Uzak makinadaki bir service’in durumunu belirleme

Uzak makinadaki bir service’in durumunu belirleme, lokal makinadaki service’in durumunu belirlemek kadar kolaydır. Tek yapmamız gereken MachineName özelliğine uzak makinanın adresini girmek.

Uzak makinadaki Print Spooler servisini sorgulamak istediğimizde;

ServiceController sc = new ServiceController("Spooler", "UzakSunucu");

if (sc.Status == ServiceControllerStatus.Running)
{
    MessageBox.Show("Servis çalışıyor");
}


Euler - 3

Euler serisinin üçüncü yazısında, Project Euler’in 3. sorusunu çözeceğiz;

Orijinal soru; The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ?

Türkçesi; 13195 rakamının asal çarpanları 5, 7, 13 ve 29’dur. 600851475143 rakamının en büyük asal çarpanı kaçtır?

Önce siz çözmeyi deneyin, çözemezseniz

using System; using System.Linq; using System.Collections.Generic;

class Program { static long EnBuyukBolen = 0;

static bool BolenleriBul(long Rakam)
{
    for (int iLoop = 2; iLoop < = int.MaxValue; iLoop++)
    {
        if (Rakam % iLoop == 0)
        {
            if (iLoop > EnBuyukBolen)
                EnBuyukBolen = iLoop;

            if (Rakam / iLoop == 1)
                return true;

            if (BolenleriBul(Rakam / iLoop))
                return true;
        }
    }
    return false;
}

static void Main(string[] args)
{
    BolenleriBul(600851475143);

    Console.WriteLine(EnBuyukBolen);

    Console.ReadLine();
} }

Kısa Sınav - 16

Windows Forms uygulaması geliştiriyorsunuz, uygulamanın final versiyonunun performansından memnun değilsiniz.

Öngörülerinize göre performans problemi kötü hafıza kullanımı kaynaklı.

Sorunlu kodu tespit etmek ve hafıza kaçaklarını düzeltmek istiyorsunuz.

Aşağıdaki araçlardan hangisini tercih etmelisiniz?

  • CLR Profiler
  • Event Viewer
  • Application Center Test Tool
  • Perfmon.exe

Sorunun doğru cevabı için;

Doğru cevap CLR Profiler olmalı.

CLR Profiler sayesinde, uygulamanızın Managed Heap kullanımını izleyebilir, Garbage Collector‘ün davranış biçimini gözlemleyebilirsiniz.

Event Viewer sayesinde, Windows’un Event Log‘una bakabilirsiniz.

Application Center Test Tool sayesinde, Web uygulamanıza stress testi yapabilir, performans ve ölçeklenebilirlik problemlerini tespit edebilirsiniz.

Perfmon.exe sayesinde, Performance Counter‘ları takip edebilir, bilgisayarın belirli anahtar kriterler için zaman içindeki değişimlerini gözleyebilirsiniz.

C# ile bilgisayarınızdaki diskleri listelemek

.Net 2.0 ile birlikte System.IO namespace’inde bulunan birçok eksiklik giderilmiştir. Özellikle Windows’un Dosya Sistemine erişmek için yeni sınıflar ve methodlar eklenmiştir.

DriveInfo sınıfında yapılan bir geliştirme sayesinde sistemde kurulu disklere erişebilir, disklerin tiplerini sorgulayabilir, kapasitelerini ve boş alan miktarını öğrenebiliriz.

Örneğin, sistemdeki diskleri listelemek için;

DriveInfo[] diskler = DriveInfo.GetDrives(); foreach (DriveInfo disk in diskler) { string diskAdi = disk.IsReady ? String.Format(“ - {0}”, disk.VolumeLabel) : null; Console.WriteLine( “{0} - {1}{2}”, disk.Name, disk.DriveType, diskAdi); }

C:\ – Fixed – Sistem D:\ – Fixed – Dosyalar E:\ – CDRom F:\ – CDRom G:\ – Removable H:\ – Removable T:\ – Fixed – Temp Y:\ – Fixed – Yedekler

IsReady property’si sayesinde disk’in o anda sistemde kullanılabilir olup olmadığını kontrol ediyoruz. Örneğin, içinde CD olmayan CD okuyucu için, disk’in etiketini almaya çalışmıyoruz. Uygulamamızın hata ile karşılaşmaması için, bu dikkat etmemiz gereken bir nokta.

Name ve DriveType özellikleri, diskin hazır olduğu durumlardan bağımsız olarak, her zaman kullanılabilir durumdadır.

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 458

Creative Commons Lisansı