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