更新:2007 年 11 月
您可以使用 CounterSample 類別來建立樣本並計算它們的內容。樣本類別會根據您所定義的準則對效能計數器「取樣」。這些準則包含一個或多個計數器值和提供這些值的頻率。此外,此類別也會記錄取得樣本的時間。您可以將所有的這些資料收集到單一的執行個體化類別中,再使用 Calculate 方法來計算。您也可以使用 Calculate 方法,來執行兩個不同樣本值比較的計算。
執行的計算視計數器類型而定;某些計數器類型已指定了特定的計算。例如,ElapsedTime 型別的計數器會比較兩個不同樣本的時間戳記,並判斷經過多少時間。許多計數器都會根據所擷取之資料執行平均計算。
定義樣本時需完成下列步驟:
建立一個或多個 CounterSample 類別的執行個體。
擷取每個執行個體的目前樣本。
呼叫 Calculate 方法,傳遞要包含在計算中的每個樣本做為參數。
若要擷取效能計數器樣本並執行計算
建立 PerformanceCounter 執行個體,並設定為與所需的分類和計數器互動。如需詳細資訊,請參閱 HOW TO:建立 PerformanceCounter 元件執行個體或 HOW TO:設定 PerformanceCounter 元件執行個體。
建立保存取樣結果的 CounterSample 類別執行個體。
呼叫 PerformanceCounter 元件執行個體的 NextSample 方法來擷取計算過的值,並將結果指派給 CounterSample 類別。
秘訣您必須擷取兩個樣本才能執行計算。
建立保存計算結果的變數,並將其資料型別指定為 [Single]。
分別對於計算所需的兩個樣本,將 NextSample 的傳回值指派給 CounterSample 型別的變數。
呼叫 CounterSample 類別的 Calculate 方法,再執行下列其中一項:
如果您已擷取兩個樣本,則將這兩個樣本 (儲存為 CounterSample 物件) 傳遞給 Calculate 方法做為參數。
如果您只擷取一個樣本,則將第一個樣本傳遞給 Calculate 方法,再使用第二個參數來擷取另一個樣本。
將計算結果設定為等於您所建立用來保存結果的變數。
注意事項:這兩個樣本必須來自於相同類型的計數器,否則此方法將擲回例外狀況。計數器類型將決定執行那一種計算。如需詳細資訊,請參閱效能計數器類型。
下列程式碼會說明如何擷取兩個樣本,並使用 Calculate 方法進行比較:
' Dim variables of types CounterSample for each sample and a ' variable of type single for the results. Dim sample1 As CounterSample Dim sample2 As CounterSample Dim result As Single ' Retrieve a sample. sample1 = PerformanceCounter1.NextSample() ' Wait some interval of time here and retrieve ' a second sample. System.Threading.Thread.Sleep(1000) sample2 = PerformanceCounter1.NextSample() ' Pass both samples to the Calculate method. result = CounterSample.Calculate(sample1, sample2)System.Diagnostics.CounterSample sample1; System.Diagnostics.CounterSample sample2; float result; // Retrieve a sample. sample1 = PerformanceCounter1.NextSample(); // Wait some interval of time here and retrieve // a second sample. System.Threading.Thread.Sleep(1000); sample2 = PerformanceCounter1.NextSample(); // Pass both samples to the Calculate method. result = System.Diagnostics.CounterSample.Calculate(sample1, sample2);或者,您可以呼叫 NextSample 方法來提供第二個樣本的值。以下範例將說明如何使用這種方式:
Dim sample1 As CounterSample Dim result As Single ' Retrieve a single sample. sample1 = PerformanceCounter1.NextSample() ' Pass the retrieved sample to the calculate method ' and retrieve another sample in the second parameter. result = CounterSample.Calculate(sample1, PerformanceCounter1.NextSample())System.Diagnostics.CounterSample sample1; float result; // Retrieve a single sample. sample1 = PerformanceCounter1.NextSample(); // Pass the retrieved sample to the calculate method // and retrieve another sample in the second parameter. result = System.Diagnostics.CounterSample.Calculate(sample1, PerformanceCounter1.NextSample());