共用方式為


.NET Compact Framework 中的效能計數器

更新:2007 年 11 月

.NET Compact Framework 不支援 PerformanceCounter 物件,因為這些物件和 Windows CE 以及 .NET Compact Framework 無關。但是,.NET Compact Framework 包含一組預先定義的效能計數器,可以分析應用程式在 .NET Compact Framework 上的負載類型。計數器無法擴充。

您可以在裝置上產生包含關於應用程式效能統計資料的檔案。如需逐步程序的詳細資訊,請參閱 HOW TO:產生效能統計資料

效能計數器有助於了解記憶體回收和 Just-In-Time 編譯對於應用程式效能的影響。從這些統計資料中,您可以確認需要最佳化的地方。

統計資料檔會以下列欄位列出效能計數器。

欄位

說明

Total

發生次數的總和。

Last Datum

資訊的最後部分。

N

發生的次數。

Mean

所有值的平均值。

Min

最小值。

Max

最大值。

.NET Compact Framework 計數器

效能計數器會組織成以下類別:

載入器

JIT Compilation - JIT 編譯

泛型

例外狀況

鎖定和執行緒

Interop

記憶體回收

網路

記憶體

Windows Form

載入器計數器

下列計數器與 Common Language Runtime (CLR) 部分有關,此部分會負責解析和載入您的應用程式所參考之元件,例如,組件 (Assembly) 和類別 (Class)。

名稱和簡短名稱

說明

計數器型別

Total Program Run Time (ms)

RunTime

從 CLR 引動過程開始的已耗用時間,以毫秒為單位。

Calculated

App Domains Created

napplication domains

在應用程式之處理序中建立的應用程式定義域的數目。

Simple

App Domains Unloaded

napplication domainsUnloaded

在應用程式的執行階段期間完成卸載的應用程式定義域數目。

Simple

Assemblies Loaded

nAssembliesloaded

已為此應用程式載入到所有應用程式定義域的組件數目。

Simple

Classes Loaded

nClassesloaded

已在應用程式的執行階段期間載入到所有應用程式定義域中的類別數目。

Simple

Methods Loaded

nMethodsloaded

已在應用程式的執行階段期間載入到所有應用程式定義域中的方法總計數。

Simple

泛型計數器

泛型計數器為載入器計數器,為精簡版的泛型功能專用。CLR 會在內部使用泛型。因此,即使您的應用程式沒有明確使用泛型,您也會在這些計數器中看到值。

名稱和簡短名稱

說明

計數器型別

Closed Types Loaded

nInstGenericTypesLoaded

已在所有應用程式定義域中載入的唯一泛型型別的計數。

「封閉型別」(Closed Type) 是已經與特定資料型別繫結的泛型類別。例如,MyGenericType<Int32> 的執行個體就是封閉型別。

Simple

Closed Types Loaded per Definition

nMaxClosedTypes

已在所有應用程式定義域中針對指定定義建立的唯一泛型型別的最大數目。

例如,如果應用程式具現了 MyGenericType<Int32>、MyGenericType<String> 和 MyGenericType<Single>,則針對 MyGenericType<T> 定義所載入的封閉型別數目就會是三 (3)。

Max 欄中的大型數目 (數百或更多),可以代表對 JIT 編譯程式碼和 CLR 資料結構而言的工作集壓力。

StaticOnly

Open Types Loaded

nOpenTypesLoaded

已在所有應用程式定義域中建立的開放泛型型別的計數。

「開放型別」(Open Type) 是已載入但是尚未與特定資料型別繫結的泛型類別。開放型別通常只會建立於反映 (Reflection) 案例。

例如,使用反映載入 MyGenericType<T> 的執行個體時,將會遞增 Open Types Loaded 計數器。當型別完成繫結時 (例如在 MyGenericType<String> 中),它就會變成封閉型別,而且會使 Closed Types Loaded 計數器遞增。.NET Compact Framework CLR 在內部使用反映,而且可以是開放型別的來源。例如,XML 序列化和 Web 服務都會在內部使用反映。

Simple

Closed Methods Loaded

nInstGenericMethodsLoaded

已在所有應用程式定義域中載入的唯一泛型方法的計數。

「封閉方法」(Closed Method) 是已經與特定資料型別繫結的泛型方法。包含這類方法的型別不一定是泛型型別。例如,MyType.ProcessData<Int32>() 的執行個體就是封閉方法。

Simple

Closed Methods Loaded per Definition

nMaxClosedMethods

已在所有應用程式定義域中針對指定定義建立的唯一泛型方法的最大數目。

這個計數器非常類似 Closed Types Loaded per Definition 計數器。使用下列 MyType.ProcessData<Int32>()、MyType.ProcessData<String>() 和 MyType.ProcessData<Single>() 的執行個體,將會為 MyType.ProcessData<T>() 定義建立三個封閉方法。

在使用 Closed Types Loaded per Definition 計數器時,Max 欄中的大型數目 (數百或更多),可以代表對 JIT 編譯程式碼和 CLR 資料結構而言的工作集壓力。

StaticOnly

Open Methods Loaded

nOpenMethodsLoaded

已在所有應用程式定義域中建立的開放泛型方法的計數。開放方法通常只會建立於反映 (Reflection) 案例。「開放方法」(Open Method) 是已經載入但是尚未繫結至特定型別的泛型方法。

.NET Compact Framework 執行階段在內部使用反映,而且可以是開放方法的來源。

Simple

鎖定和執行緒計數器

下列計數器與執行緒、鎖定、計時器和執行緒集區相關。這些計數器可透過在應用程式執行階段期間提供執行緒、計時器和鎖定使用等相關資料,協助識別執行緒相關效能的問題。

名稱和簡短名稱

說明

計數器型別

Threads in Thread Pool

nThreads

執行緒集區中目前執行緒的數目。

這個計數器會計數使用 QueueUserWorkItem 方法啟動的執行緒。這個計數器不會包括使用 Start 方法啟動的執行緒。

MinMax

Pending Timers

nPendingTimers

目前正在佇列中的計時器數目。

MinMax

Scheduled Timers

nTimersStarted

目前正在執行或排程將要執行的計數器的數目。

Simple

Timers Delayed by Thread Pool Limit

nTimersDelayed

已由執行緒集區限制所延遲的計數器的計數。

Simple

Work Items Queued

nWorkItemsQueued

佇列到執行緒集區的工作項目的計數。

Simple

Uncontested Monitor.Enter Calls

nUncontestedMonitor

Enter 方法所作的無爭論呼叫的計數。

Simple

Contested Monitor.Enter Calls

nContestedMonitor

Enter 所作的有爭論呼叫的計數。

在多執行緒應用程式中,如果 Thread1 持有鎖定,而 Thread2 需要存取該鎖定所保護的程式碼,則 Contested Monitor.Enter Calls 計數器便會遞增。

Simple

計憶體回收計數器

下列計數器與記憶體回收作業相關。

名稱和簡短名稱

說明

計數器型別

Peak Bytes Allocated (native + managed)

cbPeakMemUsage

CLR 所使用的最大位元組數,包括原生 (Native) 和 Managed 記憶體。

Calculated

Managed Objects Allocated

nObjectsAllocated

記憶體回收行程所配置的物件的計數。

Simple

Unused Managed Objects Allocated

nObjectsAllocatedNotUsed

從未使用過的配置物件的計數。

Simple

Managed Bytes Allocated

cbAllocated

記憶體回收行程所配置的位元組的計數。

Complex

Unused Managed Bytes Allocated

cbAllocatedNotUsed

從未使用過的配置位元組的計數。

Complex

Managed String Objects Allocated

nStrings

記憶體回收行程所配置的 Managed 字串物件的數目。

Simple

Bytes of String Objects Allocated

nStringBytes

記憶體回收行程所配置的字串物件的位元組計數。

Simple

Garbage Collections (GC)

nGC

記憶體回收行程已執行的次數。

Simple

Bytes Collected By GC

cbGarbage

記憶體回收行程所收集的位元組的計數。

Complex

Managed Bytes in Use After GC

cbLive

在上次記憶體回收後配置給實體物件的位元組數目。

MinMax

Total Bytes in Use After GC

cbWorkingSetMem

在上次記憶體回收行程後仍在使用中的原生和 Managed 記憶體的位元組數目。

MinMax

GC Compactions

nCompactions

記憶體回收行程已壓縮堆積 (Heap) 的次數。

Simple

Code Pitchings

nPitches

記憶體回收行程已捨棄 JIT 編譯程式碼的次數。

Simple

Calls to GC.Collect

nInduced

應用程式已呼叫 Collect 方法的次數。

Simple

GC Latency Time (ms)

msLatency

記憶體回收行程已花在收集物件和壓縮堆積上的總時間,以毫秒為單位。

記憶體回收行程的延遲時間,包括用來收集不再屬於記憶體回收行程堆積範圍之 Managed 物件的時間和壓縮時間 (若有必要)。

Complex

Pinned Objects

nPinned

在執行記憶體回收行程時所遭遇的 Pin 物件的計數。

「Pin 物件」(Pinned Object) 是位於無法變更之記憶體中的物件。例如,用來在 Managed 和 Unmanaged 程式碼之間進行通訊的記憶體緩衝區,就是 Pin 物件。記憶體回收行程無法在進行堆積壓縮時移動 Pin 物件。

Simple

Objects Moved by Compactor

nObjMoved

在壓縮時記憶體回收行程所移動的物件的計數。

Simple

Objects Not Moved by Compactor

nObjNotMoved

在壓縮期間,記憶體回收行程無法移動之物件的計數。

有多項可能原因會造成物件無法移動。有些物件本身就是無法移動的,不過這些物件相當少見。其他物件則是因為位在不需要壓縮的堆積部分中而不移動。

Simple

Objects Finalized

nFinalizersRun

已執行完成項的物件的計數。

Simple

Boxed Value Types

nBoxes

已 Boxed 的實值型別 (Value Type) 的數目。

Simple

記憶體計數器

下列計數器與記憶體回收行程所 Managed 的記憶體堆積相關。

名稱和簡短名稱

說明

計數器型別

Process Heap

HeapDefault

目前由 CLR 的預設堆積所使用的位元組的數目。

Process Heap 包含由 CLR 配置的記憶體,這些記憶體與此表所列出的其他堆積不同。

MinMax

Short Term Heap

HeapShortTerm

目前由 CLR 的短期堆積所使用的位元組的數目。

Short Term Heap 包含 CLR 為暫時使用而配置的記憶體。

MinMax

JIT Heap

HeapJitCodeBuffer

由 JIT 編譯器的堆疊所使用的位元組的數目。

JIT Heap 包含 .NET Compact Framework JIT 編譯器在編譯 Managed 方法時所產生的機器碼。只要某個 Managed 方法初次執行,或是在捨棄程式碼後初次執行某個方法時,就會進行 JIT 編譯。

MinMax

App Domain Heap

HeapAppDomain

由 CLR 的應用程式網域堆疊所使用的位元組的數目。

App Domain Heap 包含 CLR 組件載入器所使用中繼資料的動態表示。

MinMax

GC Heap

HeapGC

由記憶體回收行程堆疊所使用的位元組的數目。

GC Heap 包含由應用程式和 .NET Compact Framework 配置的記憶體。

MinMax

JIT 編譯計數器

下列計數器與 JIT 編譯器作業相關。

名稱和簡短名稱

說明

計數器型別

Native Bytes Jitted

cbJittedNative

JIT 編譯器所產生的機器碼的位元組計數。

Complex

Methods Jitted

nMethodsJitted

JIT 編譯器所產生的方法的計數。

Simple

Bytes Pitched

cbPitched

由已被捨棄的 JIT 編譯器所產生的機器碼的位元組計數。

Complex

Methods Pitched

nMethodsPitched

由已被捨棄的 JIT 編譯器所產生的方法的計數。

除非您的應用程式已在執行階段期間移到背景,否則只要 Methods Pitched 計數器出現任何正值,都表示該應用程式是在記憶體壓力下執行。

Simple

Method Pitch Latency Time (ms)

msPitchLatency

花在捨棄 JIT 編譯器所產生方法上的總時間,以毫秒為單位。

Complex

例外狀況計數器

下列的計數器與例外狀況相關。

名稱和簡短名稱

說明

Exceptions Thrown

nExceptions

已擲回的 Managed 例外狀況的計數。

由於擲回例外狀況會消耗大量資源,因此,透過追蹤應用程式所擲回的例外狀況數目,有助於找出潛在的設計問題。

Interop 計數器

下列計數器與機器碼的互通性 (Interoperability) 相關。

名稱和簡短名稱

說明

計數器型別

Platform Invoke Calls

nPInvoke

Managed 程式碼對機器碼的平台叫用呼叫的計數,內部的 CLR 平台叫用呼叫除外。

Simple

COM Calls Using a vtable

nComVTable

Managed 程式碼對機器碼的呼叫的計數 (使用 COM interop vtable 方法)。

Simple

COM Calls Using IDispatch

nComIDispatch

Managed 程式碼對機器碼的呼叫的計數 (使用 COM interop IDispatch 方法)。

Simple

Complex Marshaling

nMarshal

從 Managed 程式碼封送處理至機器碼的物件的數目 (與複製或轉換資料相關)。

Simple

Runtime Callable Wrappers

cTotalRcw

已建立的 COM 執行階段可呼叫包裝函式的總數。

當正在 .NET Compact Framework 執行階段版本上執行之 Managed 程式碼呼叫 Unmanaged COM 物件內部時,便會建立執行階段可呼叫包裝函式。

Simple

網路計數器

下列計數器與網路的傳送和接收作業相關。

名稱和簡短名稱

說明

計數器型別

Socket Bytes Sent

nBytesSent

透過通訊端 (Socket) 傳送之位元組的總計數。

Simple

Socket Bytes Received

nBytesReceived

透過通訊端接收之位元組的總數。

Simple

Windows Forms 計數器

下列計數器與 System.Windows.Forms 命名空間相關。

名稱和簡短名稱

說明

計數器型別

Controls Created

nControlsCreated

應用程式所建立的控制項的總數。

Simple

Brushes Created

nBrushesCreated

應用程式建立之筆刷物件的總數目。

Simple

Pens Created

nPensCreated

應用程式所建立之畫筆物件的總數目。

Simple

Bitmaps Created

nBitmapsCreated

應用程式所建立之點陣圖物件的總數目。

Simple

Regions Created

nRegionsCreated

應用程式所建立之區域物件的總數目。

Simple

Fonts Created

nFontsCreated

應用程式建立之字型物件的總數目。

Simple

Graphics Created (FromImage)

nGraphicsFromImage

FromImage 方法所建立之圖形物件的總數。

Simple

Graphics Created (CreateGraphics)

nGraphicsCreateGraphics

CreateGraphics 方法建立之圖形物件的總數。

Simple

請參閱

工作

HOW TO:產生效能統計資料

其他資源

.NET Compact Framework 中的效能和診斷