Leistungsindikatoren in .NET Compact Framework

Aktualisiert: November 2007

.NET Compact Framework unterstützt keine PerformanceCounter-Objekte, weil diese nicht zu Windows CE und .NET Compact Framework gehören. .NET Compact Framework umfasst jedoch eine Reihe vordefinierter Leistungsindikatoren, mit denen die unterschiedlichen Arten von Lasten der Anwendung in .NET Compact Framework analysiert werden können. Die Indikatoren sind nicht erweiterbar.

Sie können auf dem Gerät eine Datei generieren, die Leistungsstatistiken über die Anwendung enthält. Ein Verfahren mit einer Schritt-für-Schritt-Anweisung finden Sie unter Gewusst wie: Generieren von Leistungsstatistiken.

Die Leistungsindikatoren sind hilfreich, um die Auswirkungen von Garbage Collection und Just-In-Time-Kompilierung auf die Leistung der Anwendung richtig einzuschätzen. Anhand dieser Statistiken können Sie ermitteln, wo eine Optimierung erforderlich ist.

In der Statistikdatei werden die Leistungsindikatoren mit folgenden Spalten aufgeführt.

Spalte

Beschreibung

Gesamt

Summe der Ereignisse.

Letzte Daten

Die neueste Information.

N

Die Anzahl der Ereignisse.

Durchschnitt

Der Durchschnitt anderer Werte.

Min

Der minimale Wert.

Max

Der maximale Wert.

.NET Compact Framework-Indikatoren

Die Leistungsindikatoren werden in die folgenden Kategorien unterteilt:

Loader

JIT-Kompilierung

Generika

Ausnahmen

Sperren und Threads

Interop

Garbage Collection

Netzwerk

Arbeitsspeicher

Windows Forms

Indikatoren für Ladeprogramme

Die folgenden Indikatoren beziehen sich auf den Teil der Common Language Runtime (CLR), der für das Auflösen und Laden der Komponenten zuständig ist, auf die von der Anwendung verwiesen wird, z. B. Assemblys und Klassen.

Name und kurzer Name

Beschreibung

Indikatortyp

Gesamtzeit der Programmausführung (ms)

RunTime

Die ab CLR-Aufruf verstrichene Zeit in Millisekunden.

Berechnet

Erstellte Anwendungsdomänen

napplication domains

Die Anzahl der im Anwendungsprozess erstellten Anwendungsdomänen.

Einfach

Entladene Anwendungsdomänen

napplication domainsUnloaded

Die Anzahl der Anwendungsdomänen, die während der Laufzeit der Anwendung entladen wurden.

Einfach

Geladene Assemblys

nAssembliesloaded

Die Anzahl der Assemblys, die in allen Anwendungsdomänen für die Anwendung geladen wurden.

Einfach

Geladene Klassen

nClassesloaded

Die Anzahl der Klassen, die in allen Anwendungsdomänen während der Laufzeit der Anwendung geladen wurden.

Einfach

Geladene Methoden

nMethodsloaded

Die gesamte Anzahl der Methoden, die in allen Anwendungsdomänen während der Laufzeit der Anwendung geladen wurden.

Einfach

Generische Indikatoren

Die generischen Indikatoren sind Indikatoren für Ladeprogramme, die für das Generikafeature von Compact spezifisch sind. Die CLR verwendet Generika intern. Aus diesem Grund zeigen diese Indikatoren möglicherweise selbst dann Werte an, wenn die Anwendung Generika nicht explizit verwendet.

Name und kurzer Name

Beschreibung

Indikatortyp

Geladene geschlossene Typen

nInstGenericTypesLoaded

Die Anzahl eindeutiger generischer Typen, die in allen Anwendungsdomänen geladen wurden.

Ein geschlossener Typ ist eine generische Klasse, die an einen bestimmten Datentyp gebunden wurde. Eine Instanz von MyGenericType<Int32> ist beispielsweise ein geschlossener Typ.

Einfach

Per Definition geladene geschlossene Typen

nMaxClosedTypes

Die maximale Anzahl eindeutiger generischer Typen, die in allen Anwendungsdomänen für eine bestimmte Definition erstellt wurden.

Wenn eine Anwendung zum Beispiel MyGenericType<Int32>, MyGenericType<String> und MyGenericType<Single> instanziiert, ist die Anzahl der für die MyGenericType<T>-Definition geladenen geschlossenen Typen drei (3).

Eine hohe Zahl (mehrere Hundert oder mehr) in der Max-Spalte kann auf Workingsetdruck in Hinblick auf JIT-kompilierten Code und CLR-Datenstrukturen hinweisen.

StaticOnly

Geladene offene Typen

nOpenTypesLoaded

Die Anzahl offener generischer Typen, die in allen Anwendungsdomänen erstellt wurden.

Ein offener Typ ist eine generische Klasse, die geladen, jedoch nicht an einen bestimmten Datentyp gebunden wurde. Offene Typen werden normalerweise nur in Reflektionsszenarien erstellt.

Zum Beispiel wird beim Laden einer Instanz von MyGenericType<T> mittels Reflektion der Indikator für geladene offene Typen inkrementiert. Wenn der Typ gebunden wurde, wie z. B. in MyGenericType<String>, wird er zu einem geschlossenen Typ, und der Indikator für geladene geschlossene Typen wird inkrementiert. Die .NET Compact Framework-CLR verwendet Reflektion intern und kann die Quelle der offenen Typen sein. Beispielsweise wird von der XML-Serialisierung und von Webdiensten die Reflektion intern verwendet.

Einfach

Geladene geschlossene Methoden

nInstGenericMethodsLoaded

Die Anzahl eindeutiger generischer Methoden, die in allen Anwendungsdomänen geladen wurden.

Eine geschlossene Methode ist eine generische Methode, die an einen bestimmten Datentyp gebunden wurde. Der Typ, der die Methode enthält, kann ein generischer oder ein nicht generischer Typ sein. Eine Instanz von MyType.ProcessData<Int32>() ist beispielsweise eine geschlossene Methode.

Einfach

Per Definition geladene geschlossene Methoden

nMaxClosedMethods

Die maximale Anzahl eindeutiger generischer Methoden, die in allen Anwendungsdomänen für eine bestimmte Definition erstellt wurden.

Dieser Indikator ist dem Indikator für per Definition geladene geschlossene Typen sehr ähnlich. Wenn Sie die folgenden Instanzen von MyType.ProcessData<Int32>(), MyType.ProcessData<String>() und MyType.ProcessData<Single>() verwenden, werden drei geschlossene Methoden für die MyType.ProcessData<T>()-Definition erstellt.

Wie beim Indikator für per Definition geladene geschlossene Typen kann eine hohe Zahl (mehrere Hundert oder mehr) in der Max-Spalte auf Workingsetdruck in Hinblick auf JIT-kompilierten Code und CLR-Datenstrukturen hinweisen.

StaticOnly

Geladene offene Methoden

nOpenMethodsLoaded

Die Anzahl offener generischer Methoden, die in allen Anwendungsdomänen erstellt wurden. Offene Methoden werden normalerweise nur in Reflektionsszenarien erstellt. Eine offene Methode ist eine generische Methode, die geladen wurde, jedoch nicht an einen bestimmten Typ gebunden ist.

Die .NET Compact Framework-CLR verwendet Reflektion intern und kann die Quelle der offenen Methoden sein.

Einfach

Indikatoren für Sperren und Threads

Die folgenden Indikatoren beziehen sich auf Threading, Sperren, Zeitgeber und Threadpools. Diese Indikatoren können dabei helfen, threadingbezogene Leistungsprobleme zu identifizieren, indem Daten zur Thread-, Zeitgeber- und Sperrenverwendung während der Laufzeit der Anwendung bereitgestellt werden.

Name und kurzer Name

Beschreibung

Indikatortyp

Threads im Threadpool

nThreads

Die Anzahl der derzeit im Threadpool enthaltenen Threads.

Dieser Indikator zählt die Threads, die mithilfe der QueueUserWorkItem-Methode gestartet werden. Dieser Indikator zählt keine Threads, die mithilfe der Start-Methode gestartet werden.

MinMax

Noch ausstehende Zeitgeber

nPendingTimers

Die Anzahl der Zeitgeber, die sich derzeit in der Warteschlange befinden.

MinMax

Geplante Zeitgeber

nTimersStarted

Die Anzahl der derzeit ausgeführten oder zur Ausführung geplanten Zeitgeber.

Einfach

Durch Threadpoollimit verzögerte Zeitgeber

nTimersDelayed

Die Anzahl der Zeitgeber, die durch das Threadpoollimit verzögert wurden.

Einfach

Arbeitsaufgaben in der Warteschlange

nWorkItemsQueued

Die Anzahl der Arbeitsaufgaben in der Threadpool-Warteschlange.

Einfach

Unangefochtene Monitor.Enter-Aufrufe

nUncontestedMonitor

Die Anzahl der Aufrufe an die Enter-Methode, die nicht angefochten wurden.

Einfach

Angefochtene Monitor.Enter-Aufrufe

nContestedMonitor

Die Anzahl von Aufrufen an Enter, die angefochten wurden.

Wenn in Multithread-Anwendungen Thread1 eine Sperre belegt und Thread2 auf Code zugreifen muss, der durch diese Sperre bewacht wird, wird der Indikator Angefochtene Monitor.Enter-Aufrufe inkrementiert.

Einfach

Garbage Collection-Indikatoren

Die folgenden Indikatoren beziehen sich auf Garbage Collection-Vorgänge.

Name und kurzer Name

Beschreibung

Indikatortyp

Zugewiesene Spitzenbytes (systemeigen + verwaltet)

cbPeakMemUsage

Die maximale Anzahl der von der CLR sowohl im systemeigenen als auch im verwalteten Arbeitsspeicher verwendeten Bytes.

Berechnet

Zugeordnete verwaltete Objekte

nObjectsAllocated

Die Anzahl der vom Garbage Collector reservierten Objekte.

Einfach

Nicht verwendete reservierte verwaltete Objekte

nObjectsAllocatedNotUsed

Die Anzahl der reservierten Objekte, die noch nie verwendet wurden.

Einfach

Zugeordnete verwaltete Bytes

cbAllocated

Die Anzahl der vom Garbage Collector reservierten Bytes.

Komplex

Nicht verwendete reservierte verwaltete Bytes

cbAllocatedNotUsed

Die Anzahl der reservierten Bytes, die noch nie verwendet wurden.

Komplex

Reservierte verwaltete Zeichenfolgenobjekte

nStrings

Die Anzahl der verwalteten Zeichenfolgenobjekte, die vom Garbage Collector reserviert wurden.

Einfach

Bytes von reservierten Zeichenfolgenobjekten

nStringBytes

Die Anzahl der Bytes von Zeichenfolgenobjekten, die vom Garbage Collector reserviert wurden.

Einfach

Garbage Collections (GC)

nGC

Gibt an, wie häufig der Garbage Collector ausgeführt wurde.

Einfach

Von GC erfasste Bytes

cbGarbage

Die Anzahl der vom Garbage Collector erfassten Bytes.

Komplex

Verwaltete Bytes, die nach der GC in Gebrauch sind

cbLive

Die Anzahl der Bytes, die nach der letzten Garbage Collection für aktive Objekte reserviert wurden.

MinMax

Gesamtzahl der Bytes, die nach der GC in Gebrauch sind.

cbWorkingSetMem

Die Anzahl der Bytes sowohl im systemeigenen als auch im verwalteten Arbeitsspeicher, die nach der letzten Garbage Collection in Gebrauch sind.

MinMax

GC-Komprimierungen

nCompactions

Gibt an, wie häufig der Heap vom Garbage Collector komprimiert wurde.

Einfach

Codepitchings

nPitches

Gibt an, wie häufig der Garbage Collector JIT-kompilierten Code verworfen hat.

Einfach

Aufrufe an GC.Collect

nInduced

Gibt an, wie häufig die Anwendung die Collect-Methode aufgerufen hat.

Einfach

GC-Latenzzeit (ms)

msLatency

Die Gesamtzeit in Millisekunden, die der Garbage Collector zur Erfassung von Objekten und zum Komprimieren des Heaps benötigt hat.

Die Latenzzeit des Garbage Collectors umfasst die Zeit, die zum Sammeln verwalteter Objekte, die sich nicht mehr im Bereich befinden, notwendig ist, und ggf. die Komprimierungszeit des Garbage Collector-Heaps.

Komplex

Fixierte Objekte

nPinned

Die Anzahl fixierter Objekte, die beim Ausführen einer Garbage Collection gefunden wurden.

Fixierte Objekte sind Objekte, deren Position im Arbeitsspeicher sich nicht ändern kann. Beispielsweise ist ein Speicherpuffer, der für die Kommunikation zwischen verwaltetem und nicht verwaltetem Code verwendet wird, ein fixiertes Objekt. Fixierte Objekte können während der Heapkomprimierung nicht vom Garbage Collector verschoben werden.

Einfach

Durch Komprimierer verschobene Objekte

nObjMoved

Die Anzahl der Objekte, die während der Komprimierung durch den Garbage Collector verschoben wurden.

Einfach

Nicht durch Komprimierer verschobene Objekte

nObjNotMoved

Die Anzahl der Objekte, die während der Komprimierung vom Garbage Collector nicht verschoben wurden.

Es gibt verschiedene Gründe, warum Objekte nicht verschoben werden. Einige Objekte können nicht verschoben werden, aber diese Objekte sind selten. Andere Objekts werden nicht verschoben, da sie sich in einem Teil des Heaps befinden, der nicht komprimiert werden muss.

Einfach

Beendete Objekte

nFinalizersRun

Die Anzahl der Objekte, für die ein Finalizer ausgeführt wurde.

Einfach

Geschachtelte Werttypen

nBoxes

Die Anzahl der geschachtelten Werttypen.

Einfach

Arbeitsspeicherindikatoren

Die folgenden Indikatoren beziehen sich auf die Arbeitsspeicherheaps, die vom Garbage Collector verwaltet werden.

Name und kurzer Name

Beschreibung

Indikatortyp

Prozessheap

HeapDefault

Die Anzahl der Bytes, die derzeit auf dem Standardheap der CLR in Gebrauch sind.

Der Prozessheap enthält von der CLR reservierten Speicher, der nicht in die anderen in dieser Tabelle aufgelisteten Heaps passt.

MinMax

Kurzfristiger Heap

HeapShortTerm

Die Anzahl der Bytes, die derzeit auf dem kurzfristigen CLR-Heap in Gebrauch sind.

Der kurzfristige Heap enthält Speicher, der von der CLR zur temporären Verwendung reserviert wurde.

MinMax

JIT-Heap

HeapJitCodeBuffer

Die Anzahl der Bytes, die auf dem Heap des JIT-Compilers in Gebrauch sind.

Der JIT-Heap enthält den systemeigenen Code, der generiert wird, wenn der .NET Compact Framework-JIT-Compiler eine verwaltete Methode kompiliert. Die JIT-Kompilierung wird durchgeführt, sobald eine verwaltete Methode zum ersten Mal ausgeführt wird, oder wenn die Methode zum ersten Mal ausgeführt wird, nachdem Code verworfen wurde.

MinMax

Anwendungsdomänenheap

HeapAppDomain

Die Anzahl der Bytes, die auf dem Anwendungsdomänenheap der CLR in Gebrauch sind.

Der Anwendungsdomänenheap enthält die dynamische Darstellung der Metadaten, die vom Assemblyladeprogramm der CLR verwendet wird.

MinMax

GC-Heap

HeapGC

Die Anzahl der Bytes, die auf dem Garbage Collector-Heap in Gebrauch sind.

Der GC-Heap enthält von Anwendungen und .NET Compact Framework reservierten Arbeitsspeicher.

MinMax

JIT-Kompilierungsindikatoren

Die folgenden Indikatoren beziehen sich auf Vorgänge des JIT-Compilers.

Name und kurzer Name

Beschreibung

Indikatortyp

Mit JIT kompilierte systemeigene Bytes

cbJittedNative

Die Anzahl der Bytes bezogen auf den vom JIT-Compiler generierten systemeigenen Code.

Komplex

Mit JIT kompilierte Methoden

nMethodsJitted

Die Anzahl der vom JIT-Compiler generierten Methoden.

Einfach

Bytes mit Pitch

cbPitched

Die Anzahl der Byte bezogen auf den vom JIT-Compiler generierten systemeigenen Code, der verworfen wurde.

Komplex

Methoden mit Pitch

nMethodsPitched

Die Anzahl der vom JIT-Compiler generierten Methoden, die verworfen wurden.

Wenn die Anwendung nicht während ihrer Laufzeit in den Hintergrund verschoben wurde, zeigt jeder positive Wert für den Methoden mit Pitch-Indikator an, dass die Anwendung unter Speicherdruck ausgeführt wurde.

Einfach

Latenzzeit für Methoden mit Pitch (ms)

msPitchLatency

Die Gesamtzeit in Millisekunden, die zum Verwerfen der vom JIT-Compiler generierten Methoden aufgewendet wurde.

Komplex

Indikatoren für Ausnahmen

Die folgenden Indikatoren beziehen sich auf Ausnahmen.

Name und kurzer Name

Beschreibung

Ausgelöste Ausnahmen

nExceptions

Die Anzahl der ausgelösten verwalteten Ausnahmen.

Da das Auslösen einer Ausnahme sehr ressourcenintensiv ist, kann das Verfolgen der Anzahl von Ausnahmen, die von der Anwendung ausgelöst wurden, beim Erkennen potenzieller Designprobleme helfen.

Interop-Indikatoren

Die folgenden Indikatoren beziehen sich auf die Interoperabilität mit systemeigenem Code.

Name und kurzer Name

Beschreibung

Indikatortyp

Invoke-Aufrufe der Plattform

nPInvoke

Die Anzahl der Plattformaufrufe von verwaltetem Code an systemeigenen Code unter Ausschluss interner CLR-Plattformaufrufe.

Einfach

COM-Aufrufe mit einer Vtable

nComVTable

Die Anzahl der Aufrufe von verwaltetem Code an systemeigenen Code mithilfe der vtable-Methode von COM-Interop.

Einfach

COM-Aufrufe mit IDispatch

nComIDispatch

Die Anzahl der Aufrufe von verwaltetem Code an systemeigenen Code mithilfe der IDispatch-Methode von COM-Interop.

Einfach

Komplexes Marshalling

nMarshal

Die Anzahl der von verwaltetem Code an systemeigenen Code gemarshallten Objekte, bei denen Daten kopiert oder transformiert wurden.

Einfach

Runtime Callable Wrapper (RCW)

cTotalRcw

Die Gesamtzahl der erstellten zur COM-Laufzeit aufrufbaren Wrapper.

Runtime Callable Wrapper (RCW) werden erstellt, wenn verwalteter Code, der unter der .NET Compact Framework-CLR ausgeführt wird, ein nicht verwaltetes COM-Objekt aufruft.

Einfach

Netzwerkindikatoren

Die folgenden Indikatoren beziehen sich auf Sende- und Empfangsvorgänge im Netzwerk.

Name und kurzer Name

Beschreibung

Indikatortyp

Gesendete Socketbytes

nBytesSent

Die Gesamtzahl der über Sockets gesendeten Bytes.

Einfach

Empfangene Socketbytes

nBytesReceived

Die Gesamtzahl der über Sockets empfangenen Bytes.

Einfach

Windows Forms-Indikatoren

Die folgenden Indikatoren beziehen sich auf den System.Windows.Forms-Namespace.

Name und kurzer Name

Beschreibung

Indikatortyp

Erstellte Steuerelemente

nControlsCreated

Die Gesamtzahl der von der Anwendung erstellten Steuerelemente.

Einfach

Erstellte Pinsel

nBrushesCreated

Die Gesamtzahl der von der Anwendung erstellten Pinselobjekte.

Einfach

Erstellte Stifte

nPensCreated

Die Gesamtzahl der von der Anwendung erstellten Stiftobjekte.

Einfach

Erstellte Bitmaps

nBitmapsCreated

Die Gesamtzahl der von der Anwendung erstellten Bitmapobjekte.

Einfach

Erstellte Bereiche

nRegionsCreated

Die Gesamtzahl der von der Anwendung erstellten Regionsobjekte.

Einfach

Erstellte Schriftarten

nFontsCreated

Die Gesamtzahl der von der Anwendung erstellten Schriftartenobjekte.

Einfach

Erstellte Grafiken (FromImage)

nGraphicsFromImage

Die Gesamtzahl der von der FromImage-Methode erstellten Grafikobjekte.

Einfach

Erstellte Grafiken (CreateGraphics)

nGraphicsCreateGraphics

Die Gesamtzahl der von der CreateGraphics-Methode erstellten Grafikobjekte.

Einfach

Siehe auch

Aufgaben

Gewusst wie: Generieren von Leistungsstatistiken

Weitere Ressourcen

Leistung und Diagnose in .NET Compact Framework