Home Contact RSS

Makale 14: Remoting Uygulamalarının “Performance Counter”lar ile İzlenmesi

.NET içerisinde bulundurduÄŸu hazır class’lar sayesinde uygulamanızın Windows Performans Monitor ile son derece kolay bir ÅŸekilde etkileÅŸim kurabilmesini saÄŸlamaktadır.

Performans Monitor, Control Panel içerisinde bulunan “Administrative Tools” klasörü içinde “Performance” isimli shortcut’a tıklayarak ulaşılır ve ilk açıldığında aÅŸağıdaki görüntüye sahiptir.

Performans Monitor üzerinde yeni bir monitör ekranı açmak istendiÄŸinde “New Counter Set” butonuna tıklanır.

Yeni counter set’inde hiçbir counter bulunmaz. Bu boÅŸ counter set’ine yeni performance counter’ları eklemek için “Add” butonuna tıklanır.

Açılan ekranda “Performance object” seçeneÄŸi ile ne tip bir performance counter ekleneceÄŸi seçilir. .NET ile ilgili performance object’leri ekran görüntüsünde de görüldüğü gibi ÅŸu ÅŸekildedir:

Add Counters ekranında “Explain” butonuna tıklanarak performance counter hakkında detaylı bilgi alınır:

Instance seçim bölümünde uygulama seçilerek “Add” butonuna tıklanır:

Performance counter eklendikten sonra “Add Counters” ekranı baÅŸka performance counter’ların ekleneceÄŸi düşünülere kapatılmaz. Kapatılmak istendiÄŸinde “Close” butonuna tıklanır. “Close” butonuna tıklandıktan sonra geri dönülen ekranda bulunan performance counter listesinde eklenmiÅŸ olan counter bulunur.

Bu iÅŸlemleri yaptıktan sonra seçmiÅŸ olunan uygulamaya baÄŸlanacak olan Remoting client’ı run edilir ve ekrandaki deÄŸerler gözlemlenir.

Uygulama tekrar çalıştırıldığında değerler kaldığı yerden tekrar artacaktır.

.NET Framework’ün System.Diagnostics namespace’i altında bulunan PerformanceCounter class’ı Performance Monitor uygulamasının ekranda grafiksel olarak gösterdiÄŸi bilgilere, uygulamanın programmatic olarak eriÅŸebilmesini saÄŸlar. Bu sayede yazılımcılar kendilerine özel performance monitor uygulamaları geliÅŸtirebilirler ve ihtiyaçlarına özel raporlar oluÅŸturabilirler.

Daha önceden geliÅŸtirmiÅŸ olduÄŸumuz MyFirstRemotingService project’i içerisinde bulunan MyRemotableType class’ını aÅŸağıdaki ÅŸekilde deÄŸiÅŸtirerek, uygulamanın RequestCount method’u içerisinde PerformanceCounter class’ını kullanarak aldığı bilgiyi döndürmesini saÄŸlayabiliriz.

MyRemotableType.cs

using System;
using MyFirstRemotableType;
using System.Diagnostics;
namespace MyFirstWindowsService
{
    public class MyRemotableType : MarshalByRefObject, IMyRemotableType
    {
        PerformanceCounter perfCounter;

        public MyRemotableType()
        {
            perfCounter = new PerformanceCounter();
            perfCounter.CategoryName = ".NET CLR Remoting";
            perfCounter.CounterName = "Total Remote Calls";
            perfCounter.InstanceName = "MyFirstWindowsService";
            perfCounter.MachineName = Environment.MachineName;
        }

        public DateTime GetServerDateTime()
        {
            return System.DateTime.Now;
        }

        public int RequestCount()
        {
            return Convert.ToInt32(perfCounter.NextValue());
        }
    }
}

PerformansCounter class’ının CategoryName özelliÄŸi Performance Monitor uygulamasına counter eklerken seçtiÄŸimiz “Performance object” seçeneÄŸine denk gelmektedir. Bu özelliÄŸe “Add Counters” ekranında görmüş olduÄŸunuz herhangi bir deÄŸeri string olarak atayabilirsiniz.

PerformansCounter class’ının CounterName özelliÄŸi “Add Counters” ekranındaki “Counter” seçeneÄŸine denk gelmektedir. Bu özelliÄŸe “Add Counters” ekranında, “Counters” bölümünde görmüş olduÄŸunuz herhangi bir deÄŸeri string olarak atayabilirsiniz.

PerformansCounter class’ının InstanceName özelliÄŸi “Add Counters” ekranındaki “Instance” seçeneÄŸine denk gelmektedir ve instance listesinde bulunan uygulamalardan hangilerinin bu counter ile ölçüleceÄŸini belirlemek için kullanılır. Bu özelliÄŸe “Add Counters” ekranında, “Instances” bölümünde görmüş olduÄŸunuz herhangi bir deÄŸeri string olarak atayabilirsiniz.

PerformansCounter class’ının MachineName özelliÄŸi Performance Monitor uygulamasına counter eklerken seçtiÄŸimiz “Counter” seçeneÄŸine denk gelmektedir. System namespace’inde bulunan Environment class’ının sahip olduÄŸu static access-modifier’ına sahip MachineName özelliÄŸi uygulamanın üzerinde çalıştığı bilgisayarın ismini verdiÄŸinden, sabit deÄŸer verilmek istenmemesi durumunda bu özelliÄŸin atanması mümkündür.

PerformansCounter class’ının NextValue method’u counter’ın üzerinde gerekli hesaplamaları yaparak hesaplanan deÄŸeri geri döndürür.

Leave a Comment