This article has been
excerpted from book "The Complete Visual C# Programmer's Guide" from the Authors
of C# Corner.
We always measure the performance of our code (applications, services, drivers,
etc.) in the field in real time or in a testing environment. Then we can
diagnose problems and fix them in the future. Performance counters enable us to
publish, capture, and analyze the performance data of running code. A
performance graph is a two-dimensional plot with one axis indicating time
elapsed and the other reporting relevant relative or actual performance
statistics.
The common language runtime (CLR) provides a PerformanceCounter class, with
which we can read and write performance data on computers running Windows NT,
2000, or XP. We need to call counters in which the performance data is placed.
The names of the counters are stored in the Windows registry along with the
counters' various settings. Every performance counter has a unique name and
location. Another attribute of a counter is its category (the performance object
for which the counter measures data). For example, the Processor performance
category has the % Processor Time performance counter object (and others), which
has the _Total performance counter instance (and others). Please use Performance
Monitor MMC if you have Windows NT, 2000,
or XP installed (it's found on the
Administrative Tools menu) to discover other PerformanceCounter categories,
objects, and instances. PerformanceCounter class members are defined in Table
21.8.
Table 21.8: PerformanceCounter Class Members
Listing 21.17 illustrates how we might use performance counters. In this example
we measure the total processing time with the Processor performance counter.
Listing 21.17: Using PerformanceCounter (perf1.cs)
using System;
using
System.Threading;
using
System.Diagnostics;
public
class
TestPerfCounter
{
static
PerformanceCounter myCounter;
public static
void Main()
{
if (!PerformanceCounterCategory.Exists("Processor"))
{
Console.WriteLine("Object
Processor does not exist!");
return;
}
if (!PerformanceCounterCategory.CounterExists(@"%
Processor Time", "Processor"))
{
Console.WriteLine(@"Counter
% Processor Time does not exist!");
return;
}
myCounter = new
PerformanceCounter("Processor",
@"% Processor Time",
@"_Total");
// The raw value of a counter can be set in
your applications as shown below
// if the object is not read-only
try
{
myCounter.RawValue = 19;
}
catch
{
Console.WriteLine(@"Processor,
% Processor Time, _Total
instance is READONLY!");
}
Console.WriteLine(@"Press
'CTRL+C' to quit...");
while (true)
{
Console.WriteLine("@");
try
{
Console.WriteLine(@"Current
value of Processor, %Processor Time,
_Total= " +
myCounter.NextValue().ToString());
}
catch
{
Console.WriteLine(@"_Total
instance does not exist!");
return;
}
Thread.Sleep(1000);
Console.WriteLine(@"Press
'CTRL+C' to quit...");
}
}
}
Conclusion
Hope this article would have helped you in understanding the PerformanceCounter
Class in C#. See other articles on the website on .NET and C#.
|
The Complete Visual
C# Programmer's Guide covers most of the major components that make
up C# and the .net environment. The book is geared toward the
intermediate programmer, but contains enough material to satisfy the
advanced developer. |