PerformanceCounter.NextSample 方法

定义

获取计数器样本,并为其返回原始值(即未经过计算的值)。

public:
 System::Diagnostics::CounterSample NextSample();
public System.Diagnostics.CounterSample NextSample ();
member this.NextSample : unit -> System.Diagnostics.CounterSample
Public Function NextSample () As CounterSample

返回

一个 CounterSample,它代表系统为此计数器获取的下一原始值。

例外

此实例未与性能计数器正确关联。

- 或 -

使用全局共享内存时,InstanceLifetime 属性设置为 Process

访问 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

注解

此方法通常用于包含未计算值的计数器。

注意

如果 属性ProcessInstanceLifetime值为 ,并且性能计数器类别是使用 .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 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 若要执行访问性能计数器的代码,必须先将权限从标准用户提升为管理员。 你可以通过以下方式执行此操作:右键单击应用程序图标并指示需以管理员身份运行。

适用于