Monitoring Application Performance on the .NET Compact Framework Part VIII - Version 2 performance counters (Part VI: Exceptions, Interop and Networking counters)
This is the sixth in the series of .NET Compact Framework v2 performance counters. For a complete listing of the previous installments, please see the list below.
Pre-requisite:
Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters
.NET Compact Framework Version 1:
Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters
.NET Compact Framework Version 2:
Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)
Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)
Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)
Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)
Monitoring Application Performance on the .NET Compact Framework Part VII - Version 2 performance counters (Part V: JIT Compiler counters)
The following table lists all of the performance counters available in version 2 of the .NET Compact Framework. The counters highlighted, in yellow, are the ones I will be talking about today.
Loader | |
Total Program Run Time (ms) | |
App Domains Created | |
App Domains Unloaded | |
Assemblies Loaded | |
Classes Loaded | |
Methods Loaded | |
Generics | |
Closed Types Loaded | |
Closed Types Loaded per Definition | |
Open Types Loaded | |
Closed Methods Loaded | |
Closed Methods Loaded per Definition | |
Open Methods Loaded | |
Locks and Threads | |
Threads in Thread Pool | |
Pending Timers | |
Scheduled Timers | |
Timers Delayed by Thread Pool Limit | |
Work Items Queued | |
Uncontested Monitor.Enter Calls | |
Contested Monitor.Enter Calls | |
Garbage Collector | |
Peak Bytes Allocated (native + manged) | |
Managed Objects Allocated | |
Managed Bytes Allocated | |
Managed String Objects Allocated | |
Bytes of String Objects Allocated | |
Garbage Collections (GC) | |
Bytes Collected By GC | |
Managed Bytes In Use After GC | |
Total Bytes In Use After GC | |
GC Compactions | |
Code Pitchings | |
Calls to GC.Collect | |
GC Latency Time (ms) | |
Pinned Objects | |
Objects Moved by Compactor | |
Objects Not Moved by Compactor | |
Objects Finalized | |
Boxed Vlue Types | |
Process Heap | |
Short Term Heap | |
JIT Heap | |
App Domain Heap | |
GC Heap | |
JIT Compiler | |
Native Bytes Jitted | |
Methods Jitted | |
Bytes Pitched | |
Methods Pitched | |
Method Pitch Latency Time (ms) | |
Exceptions | |
Exceptions Thrown | |
Interop | |
Platform Invoke Calls | |
COM Calls Using a vtable | |
COM Calls Using IDispatch | |
Complex Marshaling | |
Runtime Callable Wrappers | |
Networking | |
Socket Bytes Sent | |
Socket Bytes Received | |
Windows.Forms | |
Controls Created | |
Brushes Created | |
Pens Created | |
Bitmaps Created | |
Regions Created | |
Fonts Created | |
Graphics Created (FromImage) | |
Graphics Created (CreateGraphics) |
The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.
I will use the following format to describe each counter.
Counter name
Brief description of the counter
Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)
Any additional comments relating to the counter
Exceptions Counters
Exceptions can be expensive. Knowing how many exceptions were thrown while your application ran is a good way to identify potential design issues. There is one counter in the Exceptions category -- Exceptions Thrown.
Exceptions Thrown
The count of managed exceptions that have been thrown.
total: Running total of exceptions thrown
Interop Counters
Interop counters contain information regarding how an application interoperates with unmanaged (native) components (functions and COM objects).
Platform Invoke Calls
The count of calls from managed code to native code via Platform Invoke (P/Invoke).
total: Running total of calls
The Platform Invoke Calls counter counts P/Invoke calls made by the application and the .NET Compact Framework runtime.
COM Calls Using a vtable
The count of calls from managed code to native code via COM using the IUnknown-derived (vtable) method.
total: Running total of calls
COM Calls Using IDispatch
The count of calls from managed code to native code via COM using the IDispatch method.
total: Running total calls
Complex Marshaling
The number of objects marshaled from managed code to native code that involved copying or transforming the data.
total: Running total of objects
Runtime Callable Wrappers
The count of COM Runtime Callable Wrappers (RCWs) that have been created.
total: Running total of RCWs created
Runtime Callable Wrappers are created when managed code (running on the .NET Compact Framework runtime) calls into an unmanaged (native) COM object.
Networking Counters
The Networking counters provide information regarding the amount of data sent and received using Sockets.
Socket Bytes Sent
The count of bytes sent by an application over one or more sockets.
total: Running total of bytes
Socket Bytes Received
The count of bytes received by an application over one or more sockets.
total: Running total of bytes
Example statistics file
I have highlighted the counters discussed here with a yellow background.
counter | total | last datum | n | mean | min | max |
Total Program Run Time (ms) | 2956837 | - | - | - | - | - |
App Domains Created | 1 | - | - | - | - | - |
App Domains Unloaded | 1 | - | - | - | - | - |
Assemblies Loaded | 8 | - | - | - | - | - |
Classes Loaded | 975 | - | - | - | - | - |
Methods Loaded | 3015 | - | - | - | - | - |
Closed Types Loaded | 75 | - | - | - | - | - |
Closed Types Loaded per Definition | 75 | 3 | 22 | 3 | 1 | 10 |
Open Types Loaded | 13 | - | - | - | - | - |
Closed Methods Loaded | 3 | - | - | - | - | - |
Closed Methods Loaded per Definition | 3 | 1 | 3 | 1 | 1 | 1 |
Open Methods Loaded | 0 | - | - | - | - | - |
Threads in Thread Pool | - | 0 | 2 | 0 | 0 | 1 |
Pending Timers | - | 0 | 4 | 0 | 0 | 1 |
Scheduled Timers | 2 | - | - | - | - | - |
Timers Delayed by Thread Pool Limit | 0 | - | - | - | - | - |
Work Items Queued | 2 | - | - | - | - | - |
Uncontested Monitor.Enter Calls | 664 | - | - | - | - | - |
Contested Monitor.Enter Calls | 0 | - | - | - | - | - |
Peak Bytes Allocated (native + managed) | 2789048 | - | - | - | - | - |
Managed Objects Allocated | 25883 | - | - | - | - | - |
Managed Bytes Allocated | 1366120 | 24 | 25883 | 52 | 8 | 135796 |
Managed String Objects Allocated | 5360 | - | - | - | - | - |
Bytes of String Objects Allocated | 124412 | - | - | - | - | - |
Garbage Collections (GC) | 1 | - | - | - | - | - |
Bytes Collected By GC | 897140 | 897140 | 1 | 897140 | 897140 | 897140 |
Managed Bytes In Use After GC | - | 147292 | 1 | 147292 | 147292 | 147292 |
Total Bytes In Use After GC | - | 2621848 | 1 | 2621848 | 2621848 | 2621848 |
GC Compactions | 0 | - | - | - | - | - |
Code Pitchings | 0 | - | - | - | - | - |
Calls to GC.Collect | 0 | - | - | - | - | - |
GC Latency Time (ms) | 46 | 46 | 1 | 46 | 46 | 46 |
Pinned Objects | 0 | - | - | - | - | - |
Objects Moved by Compactor | 0 | - | - | - | - | - |
Objects Not Moved by Compactor | 0 | - | - | - | - | - |
Objects Finalized | 82 | - | - | - | - | - |
Boxed Value Types | 3273 | - | - | - | - | - |
Process Heap | - | 1280 | 7484 | 198308 | 72 | 330016 |
Short Term Heap | - | 0 | 6382 | 963 | 0 | 42136 |
JIT Heap | - | 0 | 6402 | 421097 | 0 | 876976 |
App Domain Heap | - | 0 | 18679 | 324926 | 0 | 523240 |
GC Heap | - | 0 | 30 | 527974 | 0 | 1060864 |
Native Bytes Jitted | 844928 | 208 | 1963 | 430 | 84 | 9684 |
Methods Jitted | 1963 | - | - | - | - | - |
Bytes Pitched | 0 | 0 | 0 | 0 | 0 | 0 |
Methods Pitched | 0 | - | - | - | - | - |
Method Pitch Latency Time (ms) | 0 | 0 | 0 | 0 | 0 | 0 |
Exceptions Thrown | 4 | - | - | - | - | - |
Platform Invoke Calls | 0 | - | - | - | - | - |
COM Calls Using a vtable | 0 | - | - | - | - | - |
COM Calls Using IDispatch | 0 | - | - | - | - | - |
Complex Marshaling | 367 | - | - | - | - | - |
Runtime Callable Wrappers | 0 | - | - | - | - | - |
Socket Bytes Sent | 0 | - | - | - | - | - |
Socket Bytes Received | 0 | - | - | - | - | - |
Controls Created | 13 | - | - | - | - | - |
Brushes Created | 23 | - | - | - | - | - |
Pens Created | 8 | - | - | - | - | - |
Bitmaps Created | 16 | - | - | - | - | - |
Regions Created | 0 | - | - | - | - | - |
Fonts Created | 7 | - | - | - | - | - |
Graphics Created (FromImage) | 0 | - | - | - | - | - |
Graphics Created (CreateGraphics) | 0 | - | - | - | - | - |
Next time, I'll post the final installment of this series which will discuss the Windows.Forms counters.
Take care,
-- DK
Disclaimer(s):
This posting is provided "AS IS" with no warranties, and confers no rights.