PerformanceCounter.NextValue Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekér egy számlálómintát, és visszaadja a számított értéket.
public:
float NextValue();
public float NextValue();
member this.NextValue : unit -> single
Public Function NextValue () As Single
Válaszok
A következő számított érték, amelyet a rendszer ehhez a számlálóhoz szerez be.
Kivételek
A példány nincs megfelelően társítva teljesítményszámlálóval.
Hiba történt egy rendszer API elérésekor.
A rendszergazdai jogosultságok nélkül végrehajtó kód megkísérelt beolvasni egy teljesítményszámlálót.
Példák
Az alábbi példakód létrehoz egy számlálót ElapsedTime , és a NextValue metódussal jeleníti meg a számláló értékeit egy adott időszakban.
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Runtime.InteropServices;
public class App
{
public static void Main()
{
CollectSamples();
}
public static void CollectSamples()
{
const String categoryName = "ElapsedTimeSampleCategory";
const String counterName = "ElapsedTimeSample";
// 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 ( !PerformanceCounterCategory.Exists(categoryName) )
{
CounterCreationDataCollection CCDC = new CounterCreationDataCollection();
// Add the counter.
CounterCreationData ETimeData = new CounterCreationData();
ETimeData.CounterType = PerformanceCounterType.ElapsedTime;
ETimeData.CounterName = counterName;
CCDC.Add(ETimeData);
// Create the category.
PerformanceCounterCategory.Create(categoryName,
"Demonstrates ElapsedTime performance counter usage.",
PerformanceCounterCategoryType.SingleInstance, CCDC);
// Return, rerun the application to make use of the new counters.
return;
}
else
{
Console.WriteLine("Category exists - {0}", categoryName);
}
// Create the performance counter.
PerformanceCounter PC = new PerformanceCounter(categoryName,
counterName,
false);
// Initialize the counter.
PC.RawValue = Stopwatch.GetTimestamp();
DateTime Start = DateTime.Now;
// Loop for the samples.
for (int j = 0; j < 100; j++)
{
// Output the values.
if ((j % 10) == 9)
{
Console.WriteLine("NextValue() = " + PC.NextValue().ToString());
Console.WriteLine("Actual elapsed time = " + DateTime.Now.Subtract(Start).ToString());
OutputSample(PC.NextSample());
}
// Reset the counter on every 20th iteration.
if (j % 20 == 0)
{
PC.RawValue = Stopwatch.GetTimestamp();
Start = DateTime.Now;
}
System.Threading.Thread.Sleep(50);
}
Console.WriteLine("Elapsed time = " + DateTime.Now.Subtract(Start).ToString());
}
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
Imports System.Runtime.InteropServices
Public Class App
Public Shared Sub Main()
CollectSamples()
End Sub
Private Shared Sub CollectSamples()
Dim categoryName As String = "ElapsedTimeSampleCategory"
Dim counterName As String = "ElapsedTimeSample"
If Not PerformanceCounterCategory.Exists(categoryName) Then
Dim CCDC As New CounterCreationDataCollection()
' Add the counter.
Dim ETimeData As New CounterCreationData()
ETimeData.CounterType = PerformanceCounterType.ElapsedTime
ETimeData.CounterName = counterName
CCDC.Add(ETimeData)
' Create the category.
PerformanceCounterCategory.Create(categoryName, _
"Demonstrates ElapsedTime performance counter usage.", _
PerformanceCounterCategoryType.SingleInstance, CCDC)
Else
Console.WriteLine("Category exists - {0}", categoryName)
End If
' Create the counter.
Dim PC As PerformanceCounter
PC = New PerformanceCounter(categoryName, counterName, False)
' Initialize the counter.
PC.RawValue = Stopwatch.GetTimestamp()
Dim Start As DateTime = DateTime.Now
' Loop for the samples.
Dim j As Integer
For j = 0 To 99
' Output the values.
If j Mod 10 = 9 Then
Console.WriteLine(("NextValue() = " _
+ PC.NextValue().ToString()))
Console.WriteLine(("Actual elapsed time = " _
+ DateTime.Now.Subtract(Start).ToString()))
OutputSample(PC.NextSample())
End If
' Reset the counter every 20th iteration.
If j Mod 20 = 0 Then
PC.RawValue = Stopwatch.GetTimestamp()
Start = DateTime.Now
End If
System.Threading.Thread.Sleep(50)
Next j
Console.WriteLine(("Elapsed time = " + _
DateTime.Now.Subtract(Start).ToString()))
End Sub
Private Shared Sub OutputSample(ByVal s As CounterSample)
Console.WriteLine(ControlChars.Lf + ControlChars.Cr + "+++++++")
Console.WriteLine("Sample values - " + ControlChars.Cr _
+ ControlChars.Lf)
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
Megjegyzések
Note
Ha egy számláló számított értéke két számláló beolvasásától függ, az első olvasási művelet 0,0 értéket ad vissza. A teljesítményszámláló tulajdonságainak alaphelyzetbe állítása egy másik számláló megadására egyenértékű egy új teljesítményszámláló létrehozásával, és az új tulajdonságokat használó első olvasási művelet 0,0 értéket ad vissza. A metódushoz NextValue intézett hívások közötti ajánlott késleltetési idő egy másodperc, amely lehetővé teszi, hogy a számláló végrehajtsa a következő növekményes olvasást.
Note
A teljesítményszámlálók olvasásához rendszergazdai jogosultságokkal kell rendelkeznie. Windows Vista rendszerben a felhasználói fiókok felügyelete (UAC) határozza meg a felhasználó jogosultságait. Ha Tagja a Beépített rendszergazdák csoportnak, két futásidejű hozzáférési jogkivonatot kap: egy standard felhasználói hozzáférési jogkivonatot és egy rendszergazdai hozzáférési jogkivonatot. Alapértelmezés szerint a szokásos felhasználói szerepkörben van. A teljesítményszámlálókhoz hozzáférő kód végrehajtásához először emelnie kell a jogosultságokat a standard felhasználóról a rendszergazdára. Ezt az alkalmazás indításakor megteheti úgy, hogy a jobb gombbal az alkalmazás ikonra kattint, és jelzi, hogy rendszergazdaként szeretne futni.