Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

CounterSample Struct

Definition

Namespace:
System.Diagnostics
Assembly:
System.Diagnostics.PerformanceCounter.dll
Assembly:
System.dll
Package:
System.Diagnostics.PerformanceCounter v11.0.0-preview.5.26302.115
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs
Source:
CounterSample.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Defines a structure that holds the raw data for a performance counter.

public value class CounterSample : IEquatable<System::Diagnostics::CounterSample>
public value class CounterSample
public readonly struct CounterSample : IEquatable<System.Diagnostics.CounterSample>
public struct CounterSample
public readonly struct CounterSample
type CounterSample = struct
Public Structure CounterSample
Implements IEquatable(Of CounterSample)
Public Structure CounterSample
Inheritance
CounterSample
Implements

Examples

The following example demonstrates the use of the CounterSample class to display data for a performance counter.

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics;

public class App
{
 private static PerformanceCounter avgCounter64Sample;
 private static PerformanceCounter avgCounter64SampleBase;

 public static void Main()
 {
 ArrayList samplesList = new ArrayList();

 // If the category does not exist, create the category and exit.
 // Performance counters should not be created and immediately used.
 // There is a latency time to enable the counters, they should be created
 // prior to executing the application that uses the counters.
 // Execute this sample a second time to use the category.
 if (SetupCategory())
 return;
 CreateCounters();
 CollectSamples(samplesList);
 CalculateResults(samplesList);
 }

 private static bool SetupCategory()
 {
 if ( !PerformanceCounterCategory.Exists("AverageCounter64SampleCategory") )
 {

 CounterCreationDataCollection counterDataCollection = new CounterCreationDataCollection();

 // Add the counter.
 CounterCreationData averageCount64 = new CounterCreationData();
 averageCount64.CounterType = PerformanceCounterType.AverageCount64;
 averageCount64.CounterName = "AverageCounter64Sample";
 counterDataCollection.Add(averageCount64);

 // Add the base counter.
 CounterCreationData averageCount64Base = new CounterCreationData();
 averageCount64Base.CounterType = PerformanceCounterType.AverageBase;
 averageCount64Base.CounterName = "AverageCounter64SampleBase";
 counterDataCollection.Add(averageCount64Base);

 // Create the category.
 PerformanceCounterCategory.Create("AverageCounter64SampleCategory",
 "Demonstrates usage of the AverageCounter64 performance counter type.",
 PerformanceCounterCategoryType.SingleInstance, counterDataCollection);

 return(true);
 }
 else
 {
 Console.WriteLine("Category exists - AverageCounter64SampleCategory");
 return(false);
 }
 }

 private static void CreateCounters()
 {
 // Create the counters.

 avgCounter64Sample = new PerformanceCounter("AverageCounter64SampleCategory",
 "AverageCounter64Sample",
 false);


 avgCounter64SampleBase = new PerformanceCounter("AverageCounter64SampleCategory",
 "AverageCounter64SampleBase",
 false);

 avgCounter64Sample.RawValue=0;
 avgCounter64SampleBase.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);

 avgCounter64Sample.IncrementBy(value);

 avgCounter64SampleBase.Increment();

 if ((j % 10) == 9)
 {
 OutputSample(avgCounter64Sample.NextSample());
 samplesList.Add( avgCounter64Sample.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]) );
 }
 }

 //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
 // Description - This counter type shows how many items are processed, on average,
 // during an operation. Counters of this type display a ratio of the items
 // processed (such as bytes sent) to the number of operations completed. The
 // ratio is calculated by comparing the number of items processed during the
 // last interval to the number of operations completed during the last interval.
 // Generic type - Average
 // Formula - (N1 - N0) / (D1 - D0), where the numerator (N) represents the number
 // of items processed during the last sample interval and the denominator (D)
 // represents the number of operations completed during the last two sample
 // intervals.
 // Average (Nx - N0) / (Dx - D0)
 // Example PhysicalDisk\ Avg. Disk Bytes/Transfer
 //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
 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("++++++++++++++++++++++");
 }
}
Imports System.Collections
Imports System.Collections.Specialized
Imports System.Diagnostics

 _

Public Class App

 Private Shared avgCounter64Sample As PerformanceCounter
 Private Shared avgCounter64SampleBase As PerformanceCounter


 Public Shared Sub Main()

 Dim samplesList As New ArrayList()
 'If the category does not exist, create the category and exit.
 'Performance counters should not be created and immediately used.
 'There is a latency time to enable the counters, they should be created
 'prior to executing the application that uses the counters.
 'Execute this sample a second time to use the counters.
 If Not (SetupCategory()) Then
 CreateCounters()
 CollectSamples(samplesList)
 CalculateResults(samplesList)
 End If

 End Sub

 Private Shared Function SetupCategory() As Boolean
 If Not PerformanceCounterCategory.Exists("AverageCounter64SampleCategory") Then

 Dim counterDataCollection As New CounterCreationDataCollection()

 ' Add the counter.
 Dim averageCount64 As New CounterCreationData()
 averageCount64.CounterType = PerformanceCounterType.AverageCount64
 averageCount64.CounterName = "AverageCounter64Sample"
 counterDataCollection.Add(averageCount64)

 ' Add the base counter.
 Dim averageCount64Base As New CounterCreationData()
 averageCount64Base.CounterType = PerformanceCounterType.AverageBase
 averageCount64Base.CounterName = "AverageCounter64SampleBase"
 counterDataCollection.Add(averageCount64Base)

 ' Create the category.
 PerformanceCounterCategory.Create("AverageCounter64SampleCategory", _
 "Demonstrates usage of the AverageCounter64 performance counter type.", _
 PerformanceCounterCategoryType.SingleInstance, counterDataCollection)

 Return True
 Else
 Console.WriteLine("Category exists - AverageCounter64SampleCategory")
 Return False
 End If
 End Function 'SetupCategory

 Private Shared Sub CreateCounters()
 ' Create the counters.

 avgCounter64Sample = New PerformanceCounter("AverageCounter64SampleCategory", "AverageCounter64Sample", False)

 avgCounter64SampleBase = New PerformanceCounter("AverageCounter64SampleCategory", "AverageCounter64SampleBase", False)

 avgCounter64Sample.RawValue = 0
 avgCounter64SampleBase.RawValue = 0
 End Sub

 Private Shared Sub CollectSamples(ByVal samplesList As ArrayList)

 Dim r As New Random(DateTime.Now.Millisecond)

 ' Loop for the samples.
 Dim j As Integer
 For j = 0 To 99

 Dim value As Integer = r.Next(1, 10)
 Console.Write(j.ToString() + " = " + value.ToString())

 avgCounter64Sample.IncrementBy(value)

 avgCounter64SampleBase.Increment()

 If j Mod 10 = 9 Then
 OutputSample(avgCounter64Sample.NextSample())
 samplesList.Add(avgCounter64Sample.NextSample())
 Else
 Console.WriteLine()
 End If
 System.Threading.Thread.Sleep(50)
 Next j
 End Sub

 Private Shared Sub CalculateResults(ByVal samplesList As ArrayList)
 Dim i As Integer
 For i = 0 To (samplesList.Count - 1) - 1
 ' Output the sample.
 OutputSample(CType(samplesList(i), CounterSample))
 OutputSample(CType(samplesList((i + 1)), CounterSample))

 ' Use .NET to calculate the counter value.
 Console.WriteLine(".NET computed counter value = " + CounterSampleCalculator.ComputeCounterValue(CType(samplesList(i), CounterSample), CType(samplesList((i + 1)), CounterSample)).ToString())

 ' Calculate the counter value manually.
 Console.WriteLine("My computed counter value = " + MyComputeCounterValue(CType(samplesList(i), CounterSample), CType(samplesList((i + 1)), CounterSample)).ToString())
 Next i
 End Sub

 '++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
 '	Description - This counter type shows how many items are processed, on average,
 '		during an operation. Counters of this type display a ratio of the items 
 '		processed (such as bytes sent) to the number of operations completed. The 
 '		ratio is calculated by comparing the number of items processed during the 
 '		last interval to the number of operations completed during the last interval. 
 ' Generic type - Average
 ' 	Formula - (N1 - N0) / (D1 - D0), where the numerator (N) represents the number 
 '		of items processed during the last sample interval and the denominator (D) 
 '		represents the number of operations completed during the last two sample 
 '		intervals. 
 '	Average (Nx - N0) / (Dx - D0) 
 '	Example PhysicalDisk\ Avg. Disk Bytes/Transfer 
 '++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
 Private Shared Function MyComputeCounterValue(ByVal s0 As CounterSample, ByVal s1 As CounterSample) As [Single]
 Dim numerator As [Single] = CType(s1.RawValue, [Single]) - CType(s0.RawValue, [Single])
 Dim denomenator As [Single] = CType(s1.BaseValue, [Single]) - CType(s0.BaseValue, [Single])
 Dim counterValue As [Single] = numerator / denomenator
 Return counterValue
 End Function 'MyComputeCounterValue

 ' Output information about the counter sample.
 Private Shared Sub OutputSample(ByVal s As CounterSample)
 Console.WriteLine(ControlChars.Lf + ControlChars.Cr + "+++++++++++")
 Console.WriteLine("Sample values - " + ControlChars.Lf + ControlChars.Cr)
 Console.WriteLine((" BaseValue = " + s.BaseValue.ToString()))
 Console.WriteLine((" CounterFrequency = " + s.CounterFrequency.ToString()))
 Console.WriteLine((" CounterTimeStamp = " + s.CounterTimeStamp.ToString()))
 Console.WriteLine((" CounterType = " + s.CounterType.ToString()))
 Console.WriteLine((" RawValue = " + s.RawValue.ToString()))
 Console.WriteLine((" SystemFrequency = " + s.SystemFrequency.ToString()))
 Console.WriteLine((" TimeStamp = " + s.TimeStamp.ToString()))
 Console.WriteLine((" TimeStamp100nSec = " + s.TimeStamp100nSec.ToString()))
 Console.WriteLine("++++++++++++++++++++++")
 End Sub
End Class

Constructors

Name Description
CounterSample(Int64, Int64, Int64, Int64, Int64, Int64, PerformanceCounterType, Int64)

Initializes a new instance of the CounterSample structure and sets the CounterTimeStamp property to the value that is passed in.

CounterSample(Int64, Int64, Int64, Int64, Int64, Int64, PerformanceCounterType)

Initializes a new instance of the CounterSample structure and sets the CounterTimeStamp property to 0 (zero).

Fields

Name Description
Empty

Defines an empty, uninitialized performance counter sample of type NumberOfItems32.

Properties

Name Description
BaseValue

Gets an optional, base raw value for the counter.

CounterFrequency

Gets the raw counter frequency.

CounterTimeStamp

Gets the counter's time stamp.

CounterType

Gets the performance counter type.

RawValue

Gets the raw value of the counter.

SystemFrequency

Gets the raw system frequency.

TimeStamp

Gets the raw time stamp.

TimeStamp100nSec

Gets the raw, high-fidelity time stamp.

Methods

Name Description
Calculate(CounterSample, CounterSample)

Calculates the performance data of the counter, using two sample points. This method is generally used for calculated performance counter types, such as averages.

Calculate(CounterSample)

Calculates the performance data of the counter, using a single sample point. This method is generally used for uncalculated performance counter types.

Equals(CounterSample)

Indicates whether the specified CounterSample structure is equal to the current CounterSample structure.

Equals(Object)

Indicates whether the specified structure is a CounterSample structure and is identical to the current CounterSample structure.

GetHashCode()

Gets a hash code for the current counter sample.

Operators

Name Description
Equality(CounterSample, CounterSample)

Returns a value that indicates whether two CounterSample structures are equal.

Inequality(CounterSample, CounterSample)

Returns a value that indicates whether two CounterSample structures are not equal.

Applies to


Feedback

Was this page helpful?