.NET Compact Framework 中的性能计数器

更新:2007 年 11 月

.NET Compact Framework 不支持 PerformanceCounter 对象,因为它们与 Windows CE 和 .NET Compact Framework 无关。不过,.NET Compact Framework 包含一组预定义的性能计数器,可用来分析应用程序在 .NET Compact Framework 上的负载类型。这些计数器是不可扩展的。

您可以在设备上生成一个包含有关应用程序的性能统计信息的文件。有关分步过程,请参见如何:生成性能统计信息

性能计数器有助于理解垃圾回收和实时编译对应用程序性能的影响。您可以从这些统计信息中判断出应该进行哪些优化。

统计信息文件列出的性能计数器具有以下列。

说明

Total

出现的总次数。

Last Datum

最后一条信息。

N

出现次数。

Mean

与其他值平均后的值。

Min

最小值。

Max

最大值。

.NET Compact Framework 计数器

性能计数器按以下类别进行组织:

加载程序

JIT Compilation — JIT 编译

泛型

异常

锁和线程

互操作

垃圾回收

网络

内存

Windows 窗体

加载程序计数器

下列计数器属于公共语言运行库 (CLR) 的一个部分,该部分负责解决和加载应用程序引用的组件(例如程序集和类)。

名称和简称

说明

计数器类型

程序运行总时间(毫秒)

RunTime

从 CLR 调用开始所经过的时间(以毫秒为单位)。

Calculated

创建的应用程序域

napplication 域

在应用程序的进程中创建的应用程序域的数量。

Simple

卸载的应用程序域

napplication domainsUnloaded

在应用程序运行时期间已卸载的应用程序域的数量。

Simple

加载的程序集

nAssembliesloaded

已跨所有应用程序域为应用程序加载的程序集的数量。

Simple

加载的类

nClassesloaded

在应用程序运行时期间已跨所有应用程序域加载的类的数量。

Simple

已加载的方法

nMethodsloaded

在应用程序运行时期间已跨所有应用程序域加载的方法的总计数。

Simple

泛型计数器

泛型计数器是特定于精简版的泛型功能的加载程序计数器。CLR 在内部使用泛型。因此,即使应用程序未显式使用泛型,您也可能会在这些计数器中看到一些值。

名称和简称

说明

计数器类型

已加载的封闭式类型

nInstGenericTypesLoaded

已跨所有应用程序域加载的独特的泛型类型的计数。

封闭式类型是指已与特定的数据类型绑定的泛型类。例如,MyGenericType<Int32> 实例是一个封闭式类型。

Simple

每个定义加载的封闭式类型

nMaxClosedTypes

可跨所有应用程序域为给定的定义创建的独特的泛型类型的最大数量。

例如,如果应用程序实例化 MyGenericType<Int32>、MyGenericType<String> 和 MyGenericType<Single>,则为 MyGenericType<T> 定义加载的封闭式类型的数量为三 (3)。

Max 列中的大数目(几百或更多)可以根据 JIT 编译的代码和 CLR 数据结构指示工作集压力。

StaticOnly

已加载的开放式类型

nOpenTypesLoaded

跨所有应用程序域创建的开放式泛型类型的计数。

开放式类型是指已加载但未与特定的数据类型绑定的泛型类。开放式类型通常仅在反射方案中创建。

例如,使用反射加载 MyGenericType<T> 的实例将使“已加载的开放式类型”计数器递增。当绑定该类型时(例如在 MyGenericType<String> 中),它将变为封闭式类型并将使“已加载的开放式类型”计数器递增。.NET Compact Framework CLR 将在内部使用反射,并且可以是开放式类型的源。例如,XML 序列化和 Web 服务都将在内部使用反射。

Simple

已加载的封闭式方法

nInstGenericMethodsLoaded

已跨所有应用程序域加载的独特的泛型方法的计数。

封闭式方法是指已与特定的数据类型绑定的泛型方法。包含此方法的类型可能是泛型类型,也可能不是。例如,MyType.ProcessData<Int32>() 的实例是一个封闭式方法。

Simple

每个定义加载的封闭式方法

nMaxClosedMethods

可跨所有应用程序域为给定的定义创建的独特的泛型方法的最大数量。

此计数器与“每个定义加载的封闭式类型”计数器非常类似。使用下列 MyType.ProcessData<Int32>()、MyType.ProcessData<String>() 和 MyType.ProcessData<Single>() 的实例将为 MyType.ProcessData<T>() 定义创建三种封闭式方法。

与“每个定义加载的封闭式类型”计数器一样,“Max”列中的大数目(几百或更多)可以根据 JIT 编译的代码和 CLR 数据结构指示工作集压力。

StaticOnly

已加载的开放式方法

nOpenMethodsLoaded

跨所有应用程序域创建的开放式泛型方法的计数。开放式方法通常仅在反射方案中创建。开放式方法是指已加载但未绑定到特定类型的泛型方法。

.NET Compact Framework 运行库在内部使用反射,并且可以是开放式方法的源。

Simple

锁和线程计数器

下列计数器与线程处理、锁、计时器和线程池有关。这些计数器通过提供有关应用程序运行时期间的线程、计时器和锁使用情况的数据,帮助标识与线程处理相关的性能问题。

名称和简称

说明

计数器类型

线程池中的线程

nThreads

线程池中的当前线程数量。

此计数器将对使用 QueueUserWorkItem 方法启动的线程计数。此计数器不包括通过使用 Start 方法启动的线程。

MinMax

挂起的计时器

nPendingTimers

当前排队的计时器的数量。

MinMax

预定计时器

nTimersStarted

当前正在运行或计划要运行的计时器的数量。

Simple

被线程池限制延迟的计时器

nTimersDelayed

已被线程池限制延迟的计时器的计数。

Simple

排队的工作项

nWorkItemsQueued

已排入线程池队列的工作项的计数。

Simple

未争用的 Monitor.Enter 调用

nUncontestedMonitor

已对 Enter 方法进行的未发生争用的调用的计数。

Simple

争用的 Monitor.Enter 调用

nContestedMonitor

已对 Enter 进行的发生争用的调用的计数。

在多线程应用程序中,如果 Thread1 持有一把锁,而 Thread2 需要访问由该锁保护的代码,则 Contested Monitor.Enter Calls(争用的 Monitor.Enter 调用)计数器将递增。

Simple

垃圾回收计数器

下列计数器与垃圾回收操作有关。

名称和简称

说明

计数器类型

分配的峰值字节(本机 + 托管)

cbPeakMemUsage

由 CLR 使用的最大字节数量(包括本机内存和托管内存)。

Calculated

分配的托管对象

nObjectsAllocated

由垃圾回收器分配的对象的计数。

Simple

已分配的未使用托管对象

nObjectsAllocatedNotUsed

已分配的从未使用的对象的计数。

Simple

已分配的托管字节

cbAllocated

由垃圾回收器分配的字节的计数。

Complex

已分配的未使用托管字节

cbAllocatedNotUsed

已分配的从未使用的字节的计数。

Complex

已分配的托管字符串对象

nStrings

由垃圾回收器分配的托管字符串对象的数量。

Simple

已分配的字符串对象的字节数

nStringBytes

由垃圾回收器分配的字符串对象的字节计数。

Simple

垃圾回收 (GC)

nGC

垃圾回收器已运行的次数。

Simple

GC 回收的字节数

cbGarbage

由垃圾回收器回收的字节的计数。

Complex

垃圾回收后仍使用的托管字节数

cbLive

上次垃圾回收之后分配给活动对象的字节数。

MinMax

垃圾回收后仍使用的字节总数

cbWorkingSetMem

上次垃圾回收后仍使用的本机和托管内存的字节数量。

MinMax

GC 压缩

nCompactions

垃圾回收器已压缩堆的次数。

Simple

代码丢弃

nPitches

垃圾回收器已丢弃 JIT 编译的代码的次数。

Simple

对 GC.Collect 的调用

nInduced

应用程序已调用 Collect 方法的次数。

Simple

GC 滞后时间(毫秒)

msLatency

垃圾回收器回收对象和压缩堆所花的总时间(以毫秒为单位)。

垃圾回收器的滞后时间包括回收不再位于范围之内的托管对象的时间和压缩垃圾回收器堆所花的时间(若需要)。

Complex

固定对象

nPinned

执行垃圾回收时遇到的固定对象的计数。

固定对象是指其内存中的位置不能更改的对象。例如,用于在托管代码和非托管代码之间通信的内存缓冲区是一个固定对象。在压缩堆期间,垃圾回收器无法移动固定对象。

Simple

压缩器移动的对象

nObjMoved

由垃圾回收器在压缩期间移动的对象的计数。

Simple

压缩器未移动的对象

nObjNotMoved

在压缩期间未由垃圾回收器移动的对象的计数。

对象可能会由于各种原因而无法移动。一些对象本身无法移动,但这些对象很少。其他对象则是因为位于堆中不需要压缩的某个部分而不会移动。

Simple

完成的对象

nFinalizersRun

已为其运行终结器的对象的计数。

Simple

已装箱的值类型

nBoxes

已装箱的值类型的数量。

Simple

内存计数器

下列计数器与由垃圾回收器托管的内存堆有关。

名称和简称

说明

计数器类型

进程堆

HeapDefault

当前由 CLR 的默认堆使用的字节数。

“进程堆”包含由不适合此表中列出的其他堆的 CLR 分配的内存。

MinMax

短期堆

HeapShortTerm

当前由 CLR 的短期堆使用的字节数。

“短期堆”包含由 CLR 分配的供临时使用的内存。

MinMax

JIT 堆

HeapJitCodeBuffer

由 JIT 编译器的堆使用的字节数。

“JIT 堆”包含 .NET Compact Framework JIT 编译器编译托管方法时所生成的本机代码。只要是第一次执行某个托管方法或在丢弃代码后第一次执行某个方法,就会发生 JIT 编译。

MinMax

应用程序域堆

HeapAppDomain

由 CLR 的应用程序域堆使用的字节数。

“应用程序域堆”包含 CLR 的程序集加载程序使用的元数据的动态表现形式。

MinMax

GC 堆

HeapGC

由垃圾回收器堆使用的字节数。

“GC 堆”包含由应用程序和 .NET Compact Framework 分配的内存。

MinMax

JIT 编译计数器

下列计数器与 JIT 编译器操作有关。

名称和简称

说明

计数器类型

实时编译的本机字节

cbJittedNative

由 JIT 编译器生成的本机代码的字节计数。

Complex

实时编译的方法

nMethodsJitted

由 JIT 编译器生成的方法的计数。

Simple

丢弃的字节

cbPitched

由 JIT 编译器生成的已丢弃的本机代码的字节计数。

Complex

丢弃的方法

nMethodsPitched

由 JIT 编译器生成的已丢弃的方法的计数。

除非在应用程序运行时期间将其移动到后台,否则“丢弃的方法”计数器的任何正值将指示该应用程序在内存压力下运行。

Simple

方法丢弃滞后时间(毫秒)

msPitchLatency

丢弃由 JIT 编译器生成的方法所花的总时间(以毫秒为单位)。

Complex

异常计数器

下列计数器与异常有关。

名称和简称

说明

已引发的异常

nExceptions

已引发的托管异常的计数。

由于引发异常会消耗大量资源,因此,跟踪应用程序引发的异常数可以帮助您发现潜在的设计问题。

Interop 计数器

下列计数器和与本机代码的互操作性有关。

名称和简称

说明

计数器类型

平台 Invoke 调用

nPInvoke

从托管代码对本机代码发出的“平台调用”调用的计数,内部 CLR“平台调用”调用排除在外。

Simple

使用 vtable 的 COM 调用

nComVTable

使用 COM 互操作 vtable 方法从托管代码对本机代码发出的调用的计数。

Simple

使用 IDispatch 的 COM 调用

nComIDispatch

使用 COM 互操作 IDispatch 方法从托管代码对本机代码发出的调用的计数。

Simple

复杂封送处理

nMarshal

从托管代码封送处理为本机代码的涉及复制或转换数据的对象的数量。

Simple

运行库可调用包装

cTotalRcw

已创建的 COM 运行库可调用包装的总计数。

当在 .NET Compact Framework 运行库上运行的托管代码对非托管 COM 对象进行调用时,将创建运行库可调用包装。

Simple

联网计数器

下列计数器与网络发送和接收操作有关。

名称和简称

说明

计数器类型

发送的套接字字节

nBytesSent

通过套接字发送的字节的总计数。

Simple

接收的套接字字节

nBytesReceived

通过套接字接收的字节的总计数。

Simple

Windows 窗体计数器

下列计数器与 System.Windows.Forms 命名空间有关。

名称和简称

说明

计数器类型

已创建的控件

nControlsCreated

由应用程序创建的控件的总数。

Simple

已创建的画笔

nBrushesCreated

由应用程序创建的画笔对象的总数。

Simple

已创建的钢笔

nPensCreated

由应用程序创建的钢笔对象的总数。

Simple

已创建的位图

nBitmapsCreated

由应用程序创建的位图对象的总数。

Simple

已创建的区域

nRegionsCreated

由应用程序创建的区域对象的总数。

Simple

已创建的字体

nFontsCreated

由应用程序创建的字体对象的总数。

Simple

已创建的图形 (FromImage)

nGraphicsFromImage

FromImage 方法创建的图形对象的总数。

Simple

已创建的图形 (CreateGraphics)

nGraphicsCreateGraphics

CreateGraphics 方法创建图形对象的总数。

Simple

请参见

任务

如何:生成性能统计信息

其他资源

.NET Compact Framework 的性能和诊断