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