PerformanceCounter.NextSample 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取计数器样本,并为其返回原始值(即未经过计算的值)。
public:
System::Diagnostics::CounterSample NextSample();
public System.Diagnostics.CounterSample NextSample ();
member this.NextSample : unit -> System.Diagnostics.CounterSample
Public Function NextSample () As CounterSample
返回
一个 CounterSample,它代表系统为此计数器获取的下一原始值。
例外
访问 API 时出错。
以不具有管理特权的用户身份正在执行的代码尝试读取性能计数器。
示例
下面的代码示例演示如何使用 NextSample 方法获取计数器的下一个未计算值。 此代码示例是 类的较大示例的 PerformanceCounter 一部分。
void CollectSamples( ArrayList^ samplesList, PerformanceCounter^ PC, PerformanceCounter^ BPC )
{
Random^ r = gcnew Random( DateTime::Now.Millisecond );
// Loop for the samples.
for ( int j = 0; j < 100; j++ )
{
int value = r->Next( 1, 10 );
Console::Write( "{0} = {1}", j, value );
PC->IncrementBy( value );
BPC->Increment();
if ( (j % 10) == 9 )
{
OutputSample( PC->NextSample() );
samplesList->Add( PC->NextSample() );
}
else
Console::WriteLine();
System::Threading::Thread::Sleep( 50 );
}
}
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 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
注解
此方法通常用于包含未计算值的计数器。
注意
如果 属性Process的InstanceLifetime值为 ,并且性能计数器类别是使用 .NET Framework 版本 1.0 或 1.1 创建的,InvalidOperationException则会引发 。 使用早期版本创建的性能计数器类别使用全局共享内存,并且 的值 InstanceLifetime 必须为 Global。 如果.NET Framework版本 1.0 或 1.1 上运行的应用程序未使用该类别,请删除并重新创建该类别。
注意
若要读取 Windows Vista、Windows XP Professional x64 Edition 或 Windows Server 2003 中的性能计数器,你必须是 性能监视器 用户组的成员或具有管理权限。
若要避免在 Windows Vista 中提升访问性能计数器的权限,请将自己添加到“性能监视器”用户组”。
在 Windows Vista 中,用户帐户控制 (UAC) 决定用户的特权。 如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 若要执行访问性能计数器的代码,必须先将权限从标准用户提升为管理员。 你可以通过以下方式执行此操作:右键单击应用程序图标并指示需以管理员身份运行。