Return to
HomePage---
How To: Use Custom Performance Counters from ASP.NET
Source: http://msdn.microsoft.com/library/en-us/dnpag/html/scalenethowto12.asp
J.D. Meier, Srinath Vasireddy, Ashish Babbar, and Alex Mackman
Related Links
* Improving .NET Application Performance and Scalability home page
* Chapter 15, "Measuring .NET Application Performance"
* Chapter 6, "Improving ASP.NET Performance"
Summary
This How To shows you how to create custom performance counters and use them to monitor ASP.NET application performance. Performance counters can help you fine-tune your application and maximize the performance of the code you have written.
Applies To
* Microsoft® .NET Framework version 1.1
Contents
Overview
Creating Performance Counters
Creating a Single Performance Counter Using
PerformanceCounterCategoryCreating Multiple Performance Counters Using
CounterCreationDataCollectionUsing Server Explorer
Using Your Performance Counter in Code
Monitoring Your Performance Counter
Additional Resources
Overview
You can instrument your code with custom performance counters. The System.Diagnostics namespace provides access to the performance counter libraries. You should create your custom performance counters outside ASP.NET, by using either a console application or Microsoft Visual Studio® .NET Server Explorer. You can then use Performance Monitor to view your custom performance counters' activity.
Creating Performance Counters
You should create your performance counters outside ASP.NET. Creating a performance counter category requires permissions that the default ASP.NET account does not have. The ASP.NET account can read the custom performance counters once they have been created. Do not run ASP.NET as SYSTEM or as an administrative account because doing so poses a security risk.
Creating a Single Performance Counter Using
PerformanceCounterCategoryIf you only need to create a single counter, you can use
PerformanceCounterCategory to do so. If you need to create multiple performance counters, see "Creating Multiple Performance Counters Using CounterCreationDataCollection," later in this How To.
To create a single performance counter using
PerformanceCounterCategory
- Create a new text file named CreateCounter.cs and add the following code.
//
CreateCounter.cs using System;
using System.Diagnostics;
public class
CustomCounter{
public static void Main()
{
Console.WriteLine("Creating custom counter");
[CreateCounter();]
Console.WriteLine("Done");
[Console.ReadLine();]
}
public static void [CreateCounter()]
{
if (!PerformanceCounterCategory.Exists("MySingleCategory"))
{
[PerformanceCounterCategory.Create] ("MySingleCategory",
"My New Perf Category Description", "MyCounter",
"My New Perf Counter Desc");
}
else
{
Console.WriteLine("Counter already exists");
}
}
}
2. Compile the code using the following command line.
csc.exe
/out:CreateCounter.exe /t:exe /r:system.dll
CreateCounter.cs 3. Run
CreateCounter.exe from a command prompt to create your new performance counter.
CreateCounter.exe Results
When you run
CreateCounter.exe, the following output is produced.
Creating custom counter
Done
Validating Your Performance Counter Category and Performance Counter
Use Regedt32.exe to verify that your performance counter category and your custom performance counter are created in the following registry folder.
HKEY
LOCALMACHINE\SYSTEM\CurrentControlSet\Services
The performance counter category is named
MySingleCategory, and the performance counter is named
MyCounter.More Information
Use the Create method of the
PerformanceCounterCategory class to create a performance counter category and a single counter at the same time. A performance counter category enables you to group your performance counters. For example, ASP.NET is a performance counter category that contains such performance counters as Requests Current, Requests Queued, and so on.
Creating Multiple Performance Counters Using
CounterCreationDataCollectionIf you need to create multiple counters, you can use a
CounterCreationDataCollection to programmatically create the custom counter(s) and category. This technique enables you to create the category and multiple counters at the same time.
To create multiple performance counters using
CounterCreationDataCollection
- Create a new text file named CreateCounters.cs and add the following code.
CreateCounters.cs using System;
using System.Diagnostics;
public class
CustomCounters{
public static void Main()
{
Console.WriteLine("Creating custom counters");
[CreateCounters();]
Console.WriteLine("Done");
[Console.ReadLine();]
}
public static void [CreateCounters()]
{
[CounterCreationDataCollection] col =
new [CounterCreationDataCollection();]
// Create two custom counter objects.
[CounterCreationData] counter1 = new [CounterCreationData();]
[counter1.CounterName] = "Counter1";
[counter1.CounterHelp] = "Custom counter 1";
[counter1.CounterType] = [PerformanceCounterType.NumberOfItemsHEX32;]
[CounterCreationData] counter2 = new [CounterCreationData();]
// Set the properties of the ['CounterCreationData'] object.
[counter2.CounterName] = "Counter2";
[counter2.CounterHelp] = "Custom counter 2";
[counter2.CounterType] = [PerformanceCounterType.NumberOfItemsHEX32;]
// Add custom counter objects to [CounterCreationDataCollection.]
col.Add(counter1);
col.Add(counter2);
// Bind the counters to a [PerformanceCounterCategory]
// Check if the category already exists or not.
if(!PerformanceCounterCategory.Exists("MyMultipleCategory"))
{
[PerformanceCounterCategory] category =
PerformanceCounterCategory.Create("MyMultipleCategory",
" My New Perf Category Description ", col);
}
else
{
Console.WriteLine("Counter already exists");
}
}
}
2. Compile the code using the following command line.
csc.exe
/out:CreateCounters.exe /t:exe /r:system.dll
CreateCounters.cs 3. Run
CreateCounters.exe from a command prompt to create your new performance counters.
CreateCounters.exe Results
When you run
CreateCounters.exe, the following output is produced.
Creating custom counter
Done
Validating Your Performance Counter Category and Your Custom Performance Counters
Use Regedt32.exe to validate that your performance counter category and your custom performance counters are created in the following registry folder.
HKEY
LOCALMACHINE\SYSTEM\CurrentControlSet\Services
MyMultipleCategory is the name of the performance counter category, and Counter1 and Counter2 are the names of the performance counters.
Using Server Explorer
If you have Visual Studio .NET, you can create a custom performance counter manually by using Server Explorer.
To create a custom performance counter with Server Explorer
- Open Server Explorer and connect to your local server.
2. Right-click Performance Counters and select Create New Category.
3. Enter
MyCategory in the category name box and optionally enter a description in the Performance Counter Builder box.
4. Click New at the bottom of the form and enter
MyCounter in the counter name box.
5. Click OK.
Using Your Performance Counter in Code
Once you have created your custom performance counter, you can use it to instrument your ASP.NET application. You can set a counter's value either by incrementing it with the
PerformanceCounter.Increment method or by setting it to a specific value by calling
PerformanceCounter.RawValue.Calling
PerformanceCounter.IncrementThe following ASP.NET page shows you how to use your custom counter. This code calls
PerformanceCounter.Increment to set the new counter value.
IncrementCounter.aspx<%@ language=C# %>
<%@ import namespace="System.Diagnostics" %>
<script runat=server>
void [IncrementCounter(Object] sender, [EventArgs] e)
{
// get an instance of our perf counter
[PerformanceCounter] counter = new [PerformanceCounter();]
[counter.CategoryName] = "mySingleCategory";
[counter.CounterName] = "myCounter";
[counter.ReadOnly] = false;
// increment and close the perf counter
counter.Increment();
counter.Close();
Response.Write("Counter is incremented");
}
</script>
<form runat=server>
<input type="submit" id="btnSubmit" Value="Increment Counter"
OnServerClick="IncrementCounter" runat=server />
</form>
Calling
PerformanceCounter.RawValueThe following ASP.NET page shows you how to call
PerformanceCounter.RawValue to set your performance counter’s value to a specific value.
SetCounter.aspx<%@ language=C# %>
<%@ import namespace="System.Diagnostics" %>
<script runat=server>
void [SetCounterValue(Object] sender, [EventArgs] e)
{
// get an instance of our perf counter
[PerformanceCounter] counter = new [PerformanceCounter();]
[counter.CategoryName] = "mySingleCategory";
[counter.CounterName] = "myCounter";
[counter.ReadOnly] = false;
long myValue;
if("" != [txtCounterValue.Value)]
{
myValue = [Int32.Parse(txtCounterValue.Value);]
// set the value of the counter
[counter.RawValue] = myValue;
counter.Close();
Response.Write("Counter value is set");
}
else
{
Response.Write(
"Enter a numeric value such as 10 for the performance counter");
}
}
</script>
<form runat=server>
<input type="text" id="txtCounterValue" runat="server" />
<input type="submit" id="btnSubmit" Value="Set Counter Value"
OnServerClick="SetCounterValue" runat=server />
</form>
Monitoring Your Performance Counter
You can monitor your custom performance counter by using Performance Monitor.
To monitor your performance counter
- In the Administrative Tools program group, click Performance Monitor.
2. Add your performance counter to the monitored counters window.
Your performance counter is listed under
MyCategory in the Performance Object list.
3. Start your ASP.NET application and use a browser to access the instrumented page.
4. Note how Performance Monitor displays the counter value.
Additional Resources
For more information see the following resources:
* Chapter 15, "Measuring .NET Application Performance"
* Chapter 6, "Improving ASP.NET Performance"
* Microsoft Knowledge Base article 815159, "HOW TO: Analyze ASP.NET Web Application Performance by Using the Performance Administration Tool," at http://support.microsoft.com/default.aspx?scid=kb;en-us;815159.
* Microsoft Knowledge Base article 316365, "INFO: ROADMAP for How to Use the .NET Performance Counters," at http://support.microsoft.com/default.aspx?scid=kb;en-us;316365.
Return to
HomePage