CounterSample Structure
.NET Framework 4.5
Defines a structure that holds the raw data for a performance counter.
Namespace: System.Diagnostics
Assembly: System (in System.dll)
The CounterSample type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | CounterSample(Int64, Int64, Int64, Int64, Int64, Int64, PerformanceCounterType) | Initializes a new instance of the CounterSample structure and sets the CounterTimeStamp property to 0 (zero). |
![]() | 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. |
| 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. |
| Name | Description | |
|---|---|---|
![]() ![]() | Calculate(CounterSample) | Calculates the performance data of the counter, using a single sample point. This method is generally used for uncalculated performance counter types. |
![]() ![]() | 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. |
![]() | 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. (Overrides ValueType.Equals(Object).) |
![]() | GetHashCode | Gets a hash code for the current counter sample. (Overrides ValueType.GetHashCode().) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | ToString | Returns the fully qualified type name of this instance. (Inherited from ValueType.) |
| Name | Description | |
|---|---|---|
![]() ![]() | Equality | Returns a value that indicates whether two CounterSample structures are equal. |
![]() ![]() | Inequality | Returns a value that indicates whether two CounterSample structures are not equal. |
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("++++++++++++++++++++++"); } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.




