-----------------------------------------------------------

New Message on BDOTNET

-----------------------------------------------------------
From: LovedJohnySmith
Message 1 in Discussion



Hi Dear Frnz,



    Good Day to u all,



        Today
I would like to share System Performance Monitoring Session, Actually,
The PerformanceCounter component can be used for both reading existing
predefined or custom counters and publishing (writing) performance data
to custom counters.

        To read
from a performance counter, create an instance of the PerformanceCounter
class, set the CategoryName,
CounterName,
and, optionally, the InstanceName
or MachineName
properties, and then call the NextValue
method to take a performance counter reading.

        To publish
performance counter data, create one or more custom counters using the
PerformanceCounterCategory.Create
method, create an instance of the PerformanceCounter class, set
the CategoryName, CounterName and, optionally, InstanceName
or MachineName properties, and then call the IncrementBy,
Increment,
or Decrement
methods, or set the RawValue
property to change the value of your custom counter.

        The counter
is the mechanism by which performance data is collected. The Registry stores
the names of all the counters, each of which is related to a specific area
of system functionality. Examples include a processor's busy time, memory
usage, or the number of bytes received over a network connection.

        Each counter
is uniquely identified through its name and its location. In the same way
that a file path includes a drive, a directory, one or more subdirectories,
and a file name, counter information consists of four elements: the computer,
the category, the category instance, and the counter name.

        The counter
information must include the category, or performance object, that the
counter measures data for. A computer's categories include physical components,
such as processors, disks, and memory. There are also system categories,
such as processes and threads. Each category is related to a functional
element within the computer and has a set of standard counters assigned
to it. These objects are listed in the Performance object drop-down
list of the Add Counters dialog box within the Windows 2000 System
Monitor, and you must include them in the counter path. Performance data
is grouped by the category to which is it related.

        In certain
cases, several copies of the same category can exist. For example, several
processes and threads run simultaneously, and some computers contain more
than one processor. The category copies are called category instances,
and each instance has a set of standard counters assigned to it. If a category
can have more than one instance, an instance specification must be included
in the counter information.

        To obtain
performance data for counters that required an initial or previous value
for performing the necessary calculation, call the NextValue method
twice and use the information returned as your application requires.

[C#] 



using System;

using System.Collections;

using System.Collections.Specialized;

using System.Diagnostics;



public class App {



    private static PerformanceCounter PC;

    private static PerformanceCounter BPC;



    public static void Main()

    {    

    

        ArrayList samplesList = new ArrayList();



        SetupCategory();

        CreateCounters();

        CollectSamples(samplesList);

        CalculateResults(samplesList);



    }

    



    private static bool SetupCategory()

    {        

        if ( !PerformanceCounterCategory.Exists("AverageCounter64SampleCategory")
) 

        {



            CounterCreationDataCollection
CCDC = new CounterCreationDataCollection();

            

            // Add the counter.

            CounterCreationData averageCount64
= new CounterCreationData();

            averageCount64.CounterType =
PerformanceCounterType.AverageCount64;

            averageCount64.CounterName =
"AverageCounter64Sample";

            CCDC.Add(averageCount64);

            

            // Add the base counter.

            CounterCreationData averageCount64Base
= new CounterCreationData();

            averageCount64Base.CounterType
= PerformanceCounterType.AverageBase;

            averageCount64Base.CounterName
= "AverageCounter64SampleBase";

            CCDC.Add(averageCount64Base);



            // Create the category.

            PerformanceCounterCategory.Create("AverageCounter64SampleCategory",


                "Demonstrates
usage of the AverageCounter64 performance counter type.", 

                CCDC);

                

            return(true);

        }

        else

        {

            Console.WriteLine("Category
exists - AverageCounter64SampleCategory");

            return(false);

        }

    }

    

    private static void CreateCounters()

    {

        // Create the counters.



        PC = new PerformanceCounter("AverageCounter64SampleCategory",


            "AverageCounter64Sample",


            false);

        



        BPC = new PerformanceCounter("AverageCounter64SampleCategory",


            "AverageCounter64SampleBase",


            false);

        

        

        PC.RawValue=0;

        BPC.RawValue=0;

    }

    

    private static void CollectSamples(ArrayList samplesList)

    {

        

        Random r = new Random( DateTime.Now.Millisecond
);



        // Loop for the samples.

        for (int j = 0; j < 100; j++) 

        {

            

            int value = r.Next(1, 10);

            Console.Write(j + " = "
+ value);



            PC.IncrementBy(value);



            BPC.Increment();



            if ((j % 10) == 9) 

            {

                OutputSample(PC.NextSample());

                samplesList.Add(
PC.NextSample() );

            }

            else

                Console.WriteLine();

            

            System.Threading.Thread.Sleep(50);

        }



    }

    

    private static void CalculateResults(ArrayList samplesList)

    {

        for(int i = 0; i < (samplesList.Count -
1); i++)

        {

            // Output the sample.

            OutputSample( (CounterSample)samplesList[i]
);

            OutputSample( (CounterSample)samplesList[i+1]
);



            // Use .NET to calculate the
counter value.

            Console.WriteLine(".NET
computed counter value = " +

                
CounterSampleCalculator.ComputeCounterValue((CounterSample)samplesList[i],

                (CounterSample)samplesList[i+1])
);



            // Calculate the counter value
manually.

            Console.WriteLine("My computed
counter value = " + 

                MyComputeCounterValue((CounterSample)samplesList[i],

                (CounterSample)samplesList[i+1])
);



        }

    }

    



    private static Single MyComputeCounterValue(CounterSample
s0, CounterSample s1)

    {

        Single numerator = (Single)s1.RawValue - (Single)s0.RawValue;

        Single denomenator = (Single)s1.BaseValue -
(Single)s0.BaseValue;

        Single counterValue = numerator / denomenator;

        return(counterValue);

    }

        

    // Output information about the counter sample.

    private static void OutputSample(CounterSample s)

    {

        Console.WriteLine("\r\n+++++++++++");

        Console.WriteLine("Sample values - \r\n");

        Console.WriteLine("   BaseValue  
     = " + s.BaseValue);

        Console.WriteLine("   CounterFrequency
= " + s.CounterFrequency);

        Console.WriteLine("   CounterTimeStamp
= " + s.CounterTimeStamp);

        Console.WriteLine("   CounterType
     = " + s.CounterType);

        Console.WriteLine("   RawValue  
      = " + s.RawValue);

        Console.WriteLine("   SystemFrequency
 = " + s.SystemFrequency);

        Console.WriteLine("   TimeStamp  
     = " + s.TimeStamp);

        Console.WriteLine("   TimeStamp100nSec
= " + s.TimeStamp100nSec);

        Console.WriteLine("++++++++++++++++++++++");

    }

}



Regards,

Smith



Johnson  Smith

Tata Consultancy Services Limited

Mailto: [EMAIL PROTECTED]

URL: http://JohnsonSmith.blogspot.com

Website: http://www.tcs.com

-----------------------------------------------------------

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/BDOTNET/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you received 
this message by mistake, please click the "Remove" link below. On the pre-addressed 
e-mail message that opens, simply click "Send". Your e-mail address will be deleted 
from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to