다음을 통해 공유


.NET Compact Framework의 성능 카운터

업데이트: 2007년 11월

PerformanceCounter 개체는 Windows CE 및 .NET Compact Framework와 관련이 없으므로 .NET Compact Framework에서는 이 개체를 지원하지 않습니다. 하지만 .NET Compact Framework에는 응용 프로그램이 .NET Compact Framework에서 사용하는 로드 형식을 분석하기 위해 미리 정의된 성능 카운터 집합이 들어 있습니다. 카운터는 확장할 수 없습니다.

장치에서 응용 프로그램에 대한 성능 통계를 포함하는 파일을 생성할 수 있습니다. 단계별 절차는 방법: 성능 통계 생성을 참조하십시오.

성능 카운터를 사용하면 가비지 수집과 Just-In-Time 컴파일이 응용 프로그램 성능에 미치는 영향을 쉽게 이해할 수 있습니다. 이러한 통계를 사용하여 최적화가 수행되어야 하는 위치를 판단할 수 있습니다.

통계 파일에는 다음 열에 있는 성능 카운터가 표시됩니다.

설명

Total

개수 합계입니다.

Last Datum

마지막 정보입니다.

N

개수입니다.

Mean

다른 값들의 중간값입니다.

Min

최소값입니다.

Max

최대값입니다.

.NET Compact Framework 카운터

성능 카운터는 다음과 같은 범주로 구성되어 있습니다.

로더

JIT 컴파일

제네릭

예외

잠금 및 스레드

Interop

가비지 수집

네트워킹

메모리

Windows Forms

로더 카운터

다음 카운터는 어셈블리 및 클래스와 같이 응용 프로그램에서 참조하는 구성 요소를 확인하고 로드해야 하는 CLR(공용 언어 런타임) 작업과 관련된 것입니다.

이름 및 약식 이름

설명

카운터 형식

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

제네릭 카운터

제네릭 카운터는 .NET Compact Framework의 제네릭 기능과 관련된 로더 카운터입니다. CLR에서는 내부적으로 제네릭이 사용됩니다. 따라서 응용 프로그램에서 제네릭을 명시적으로 사용하지 않는 경우에도 이러한 카운터의 값을 볼 수 있습니다.

이름 및 약식 이름

설명

카운터 형식

Closed Types Loaded

nInstGenericTypesLoaded

응용 프로그램 도메인 전체에 걸쳐 로드된 고유한 제네릭 형식의 수입니다.

폐쇄형 형식은 특정 데이터 형식과 바인딩된 제네릭 클래스입니다. 예를 들어, 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

응용 프로그램 도메인 전체에 걸쳐 만들어진 개방형 제네릭 형식의 수입니다.

개방형 형식은 로드되었지만 아직 특정 데이터 형식에는 바인딩되지 않은 제네릭 클래스입니다. 개방형 형식은 일반적으로 리플렉션 시나리오에서만 만듭니다.

예를 들어, 리플렉션을 사용하여 MyGenericType<T>의 인스턴스를 로드하면 Open Types Loaded 카운터가 늘어납니다. 개방형 형식이 MyGenericType<String>과 같이 바인딩되면 해당 형식은 폐쇄형 형식이 되고 Closed Types Loaded 카운터가 늘어납니다. .NET Compact Framework CLR은 리플렉션을 내부적으로 사용하여 개방형 형식의 소스가 될 수 있습니다. 예를 들어 XML serialization과 XML Web services에서는 리플렉션을 내부적으로 사용합니다.

Simple

Closed Methods Loaded

nInstGenericMethodsLoaded

응용 프로그램 도메인 전체에 걸쳐 로드된 고유한 제네릭 메서드의 수입니다.

폐쇄형 메서드는 특정 데이터 형식과 바인딩된 제네릭 메서드입니다. 이 메서드가 포함된 형식은 제네릭 형식일 수도 있고 제네릭 형식이 아닐 수도 있습니다. 예를 들어, 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

응용 프로그램 도메인 전체에 걸쳐 만들어진 개방형 제네릭 메서드의 수입니다. 개방형 메서드는 일반적으로 리플렉션 시나리오에서만 만듭니다. 개방형 메서드는 로드되었지만 아직 특정 형식에 바인딩되지는 않은 제네릭 메서드입니다.

.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에서 사용하는 최대 바이트 수입니다.

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

가비지 수집기에서 할당한 관리되는 문자열 개체의 수입니다.

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

마지막 가비지 수집 이후 사용 중인 네이티브 및 관리되는 메모리의 바이트 수입니다.

MinMax

GC Compactions

nCompactions

가비지 수집기가 힙을 압축한 횟수입니다.

Simple

Code Pitchings

nPitches

가비지 수집기가 JIT 컴파일된 코드를 삭제한 횟수입니다.

Simple

Calls to GC.Collect

nInduced

응용 프로그램이 Collect 메서드를 호출한 횟수입니다.

Simple

GC Latency Time(ms)

msLatency

가비지 수집기가 개체를 수집하고 힙을 압축하는 데 걸린 총 시간(밀리초)입니다.

가비지 수집기의 대기 시간에는 더 이상 범위에 있지 않은 관리되는 개체를 수집하는 시간과 가비지 수집기 힙의 압축 시간(필요할 경우)이 포함됩니다.

Complex

Pinned Objects

nPinned

가비지 수집을 수행하는 동안 발생한 고정된 개체의 수입니다.

고정된 개체는 메모리 내에서의 위치를 변경할 수 없는 개체입니다. 예를 들어, 관리 코드와 비관리 코드 간의 통신에 사용되는 메모리 버퍼는 고정된 개체입니다. 고정된 개체는 힙 압축 중에 가비지 수집기에 의해 이동될 수 없습니다.

Simple

Objects Moved by Compactor

nObjMoved

압축 중에 가비지 수집기가 이동한 개체의 수입니다.

Simple

Objects Not Moved by Compactor

nObjNotMoved

압축 중에 가비지 수집기가 이동하지 못한 개체의 수입니다.

여러 가지 이유로 이동할 수 없는 개체가 있을 수 있지만 이러한 개체는 거의 드뭅니다. 다른 개체는 힙에서 압축할 필요가 없는 부분에 포함되어 있으므로 이동되지 않습니다.

Simple

Objects Finalized

nFinalizersRun

종료자가 실행된 개체의 수입니다.

Simple

Boxed Value Types

nBoxes

boxed 값 형식의 수입니다.

Simple

메모리 카운터

다음 카운터는 가비지 수집기에서 관리하는 메모리 힙과 관련된 것입니다.

이름 및 약식 이름

설명

카운터 형식

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 컴파일러에서 관리되는 메서드를 컴파일할 때 생성된 네이티브 코드가 들어 있습니다. 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

throw된 관리되는 예외의 수입니다.

예외가 throw되면 많은 양의 리소스가 사용되므로 응용 프로그램에서 throw된 예외의 수를 추적하면 잠재적인 디자인 문제를 쉽게 파악할 수 있습니다.

Interop 카운터

다음 카운터는 네이티브 코드와의 상호 운용성과 관련된 것입니다.

이름 및 약식 이름

설명

카운터 형식

Platform Invoke Calls

nPInvoke

내부 CLR P/Invoke 호출을 제외하는 관리 코드에서 네이티브 코드로의 P/Invoke 호출 수입니다.

Simple

COM Calls Using a vtable

nComVTable

COM interop vtable 메서드를 사용하는 관리 코드에서 네이티브 코드로의 호출 수입니다.

Simple

COM Calls Using IDispatch

nComIDispatch

COM interop IDispatch 메서드를 사용하는 관리 코드에서 네이티브 코드로의 호출 수입니다.

Simple

Complex Marshaling

nMarshal

데이터 복사 또는 변환을 포함하는 관리 코드에서 네이티브 코드로 마샬링된 개체의 수입니다.

Simple

RCW

cTotalRcw

만들어진 COM 런타임 호출 가능 래퍼의 총 개수입니다.

런타임 호출 가능 래퍼는 .NET Compact Framework 런타임에서 실행되는 관리 코드가 관리되지 않는 COM 개체를 호출할 때 만들어집니다.

Simple

네트워킹 카운터

다음 카운터는 네트워크 송신 및 수신 작업과 관련된 것입니다.

이름 및 약식 이름

설명

카운터 형식

Socket Bytes Sent

nBytesSent

소켓을 통해 보낸 총 바이트 수입니다.

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

참고 항목

작업

방법: 성능 통계 생성

기타 리소스

.NET Compact Framework의 성능 및 진단