.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 |