Threadansicht in der Parallelitätsschnellansicht

Die Threadansicht ist die detaillierteste und funktionsreichste Ansicht in der Parallelitätsschnellansicht. Sie können anhand der Threadansicht ermitteln, welche Threads in einem Ausführungssegment Code ausführen, und analysieren, welche Threads aufgrund der Synchronisierung, aufgrund von E/A oder aus anderen Gründen Code ausführen oder blockieren. Berichte zur Threadansicht profilen außerdem die Ausführung der Aufruflistenstruktur und die Aufhebung von Blockierungen für Threads.

Wenn Threads ausgeführt werden, sammelt die Parallelitätsschnellansicht Beispiele. Wenn die Ausführung eines Threads beendet wird, überprüft die Schnellansicht alle Kontextwechselereignisse für den Thread. Kontextwechsel können aus folgenden Gründen auftreten:

  • Ein Thread wird auf einer Synchronisierungsprimitive blockiert.
  • Das Quantum eines Threads läuft ab.
  • Durch einen Thread erfolgt eine blockierende E/A-Anforderung.

Die Parallelitätsschnellansicht kategorisiert Thread- und Kontextwechselereignisse und durchsucht die Aufrufliste des Threads nach bekannten blockierenden APIs. Sie zeigt die Threadkategorien in der aktiven Legende im unteren linken Bereich der Threadansicht an. In den meisten Fällen können Sie die Ursache eines blockierenden Ereignisses identifizieren, indem Sie die Aufruflisten überprüfen, die Kontextwechselereignissen entsprechen.

Wenn keine Übereinstimmung in der Aufrufliste gefunden wird, verwendet die Parallelitätsschnellansicht den von Windows angegebenen Wartegrund. Die Windows-Kategorie basiert jedoch möglicherweise auf einem Implementierungsdetail und entspricht nicht der Absicht des Benutzers. Windows meldet z. B. die Warteursache für das Blockieren einer nativen SRW-Sperre (Slim Reader/Writer) als E/A und nicht als Synchronisierung.

In der Threadansicht werden auch Abhängigkeiten zwischen Threads angezeigt. Wenn Sie beispielsweise einen Thread ermitteln, der ein Synchronisierungsobjekt blockiert hat, können Sie den Thread suchen, der die Blockierung aufgehoben hat. Sie können die Aufrufliste nach der Stelle durchsuchen, an der der Thread die Blockierung des anderen Threads aufgehoben hat.

Sie können die Threadansicht für Folgendes nutzen:

  • Identifizieren von Gründen, warum die Benutzeroberfläche (UI) einer App in bestimmten Ausführungsphasen nicht reagiert
  • Bestimmen des Zeitumfangs, der für das Blockieren von Synchronisierung, E/A, Seitenfehlern und anderen Ereignissen aufgewendet wird
  • Ermitteln des Grads der Störung durch andere Prozesse, die auf dem System ausgeführt werden
  • Lastenausgleichsprobleme bei paralleler Ausführung identifizieren.
  • Finden der Gründe für suboptimale bzw. nicht vorhandene Skalierbarkeit Z. B: Warum verbessert sich die Leistung einer parallelen App nicht, wenn mehr logische Kerne verfügbar sind?
  • Den Parallelitätsgrad in der Anwendung verstehen, um die Parallelisierung zu unterstützen.
  • Identifizieren von Abhängigkeiten zwischen Arbeitsthreads und kritischen Pfaden der Ausführung

Verwenden der Threadansicht

Klicken Sie zum Starten der Parallelitätsschnellansicht auf Analysieren>Parallelitätsschnellansicht, und wählen Sie anschließend z. B. die Option Neuen Prozess starten aus.

Die Parallelitätsschnellansicht startet dann die App und verfolgt so lange die Abläufe, bis Sie auf Sammlung beenden klicken. Die Schnellansicht analysiert anschließend die Ablaufverfolgung und zeigt die Ergebnisse auf der Seite „Ablaufverfolgungsbericht“ an.

Klicken Sie oben links im Bericht auf die Registerkarte Threads, um die Threadansicht zu öffnen.

Threads view

Wählen Sie Zeitintervalle und Threads aus, um die entsprechende Leistung zu analysieren.

Zeitachsenanalyse

Im oberen Bereich der Threadansicht finden Sie eine Zeitachse. Auf der Zeitachse wird die Aktivität aller Threads im Prozess sowie aller physischen Laufwerke auf dem Hostcomputer angezeigt. Außerdem werden GPU-Aktivität und Markerereignisse angezeigt.

Die x-Achse der Zeitachse gibt die Zeit an und auf der y-Achse gibt es verschiedene Kanäle:

  • Zwei E/A-Kanäle für jedes Laufwerk im System, einen Kanal für Lesevorgänge und einen für Schreibvorgänge.
  • Einen Kanal für jeden Thread im Prozess.
  • Markerkanäle, falls Markerereignisse in der Ablaufverfolgung vorhanden sind. Markerkanäle werden zuerst unter den Threadkanälen angezeigt, die diese Ereignisse generiert haben.
  • GPU-Kanäle.

Die Threads werden zuerst in der Reihenfolge sortiert, in der sie erstellt werden, sodass der Hauptthread der App an erster Stelle steht. Wenn Sie Threads anhand eines anderen Aspekts (z. B. der Ausführung) sortieren möchten, wählen Sie eine andere Option aus der Dropdownliste Sortieren nach aus.

Die Farben auf der Zeitachse zeigen den Status eines Threads zu einem bestimmten Zeitpunkt an. Ausführende Segmente sind grün, für die Synchronisierung blockierte Segmente sind rot, Segmente mit Vorrang sind gelb und mit der Geräte-E/A beschäftigte Segmente sind violett.

Sie können die Ansicht vergrößern, um mehr Details anzuzeigen, oder verkleinern, um ein längeres Zeitintervall anzuzeigen. Wählen Sie Punkte im Diagramm aus, um Details zu Kategorien, Startzeiten, Verzögerungen und Aufruflistenzuständen abzurufen.

Untersuchen Sie anhand der Zeitachse den Lastenausgleich zwischen Threads, die an einer parallelen Schleife beteiligt sind oder gleichzeitige Aufgaben ausführen. Wenn ein Thread zum Abschließen mehr Zeit in Anspruch nimmt als die anderen, ist die Arbeit möglicherweise unausgewogen verteilt. Sie können die Leistung Ihrer App verbessern, indem Sie die Arbeit unter den Threads gleichmäßiger verteilen.

Wenn zu einem Zeitpunkt nur ein Thread ausführt wird, kann die App die Parallelität auf dem System möglicherweise nicht vollständig nutzen. Sie können das Zeitachsendiagramm verwenden, um Abhängigkeiten zwischen Threads und die zeitlichen Beziehungen zwischen blockierenden und blockierten Threads zu untersuchen. Wenn Sie Threads neu anordnen möchten, wählen Sie einen Thread aus, und klicken Sie dann auf der Symbolleiste auf die Pfeile nach oben und nach unten.

Sie können vollständig blockierte oder nicht funktionierende Threads ausblenden, da deren Statistiken irrelevant sind und die Berichte überlasten können. Sie können Threads ausblenden, indem Sie deren Namen auswählen und in der Symbolleiste auf Ausgewählte Threads ausblenden oder Alle außer den ausgewählten Threads ausblenden klicken. Wenn Sie Threads ermitteln möchten, die ausgeblendet werden sollen, klicken Sie im Bereich unten links auf den Link Zusammenfassung pro Thread. Sie können die Threads ausblenden, für die im Graph Zusammenfassung pro Thread keine Aktivität verzeichnet ist.

Details zur Threadausführung

Sie erhalten genauere Informationen zu einem Ausführungssegment, wenn Sie in einem grünen Segment auf der Zeitachse einen Punkt auswählen. In der Parallelitätsschnellansicht wird über dem ausgewählten Punkt ein Caretzeichen angezeigt. Die entsprechende Aufrufliste finden Sie im unteren Bereich auf der Registerkarte Aktuell. Sie können auf dem Ausführungssegment mehrere Punkte auswählen.

Hinweis

Die Parallelitätsschnellansicht ist möglicherweise nicht in der Lage, eine Auswahl auf einem Ausführungssegment aufzulösen, wenn das Segment weniger als eine Millisekunde umfasst.

Klicken Sie in der Legende unten links auf Ausführung, um ein Ausführungsprofil für alle eingeblendeten Threads im ausgewählten Zeitbereich zu erhalten.

Details zur Threadblockierung

Sie erhalten Informationen zu einer bestimmten Region auf einem Thread, wenn Sie mit dem Mauszeiger auf diesen Bereich zeigen. Dann wird eine QuickInfo angezeigt. Die QuickInfo beinhaltet Informationen wie die Kategorie, die Startzeit und die Verzögerung. Wählen Sie die Region aus, um eine Aufrufliste für diesen Zeitpunkt auf der Registerkarte Aktuell anzuzeigen, die sich im unteren Bereich befindet. In dem Bereich wird außerdem die Kategorie, die Verzögerung, die blockierende API (falls vorhanden) und ggf. der Thread angezeigt, der die Blockade aufhebt. Sie können anhand der Aufrufliste den Grund für die Ereignisse bestimmen, die den Thread blockieren.

Auf einem Ausführungspfad können mehrere blockierende Ereignisse auftreten. Wählen Sie im Bereich links eine Blockierungskategorie aus der Legende aus, um diese Pfade nach Blockierungskategorie sortiert zu überprüfen und Problembereiche schneller zu finden.

Abhängigkeiten zwischen Threads

In der Parallelitätsschnellansicht werden Abhängigkeiten zwischen Threads im Prozess angezeigt, damit Sie feststellen können, was ein blockierter Thread ausführen wollte, und welcher andere Thread die Ausführung ermöglicht hat.

Wählen Sie das Blockierungssegment auf der Zeitachse aus, um festzustellen, welcher Thread die Blockierung eines anderen Threads aufgehoben hat. Wenn die Parallelitätsschnellansicht den die Blockierung aufhebenden Thread bestimmen kann, zeichnet sie eine Linie zwischen diesem und dem ausführenden Segment, das dem blockierenden Segment folgt. Klicken Sie im unteren Bereich auf die Registerkarte Stapelblockierung wird aufgehoben, damit die betreffende Aufrufliste angezeigt wird.

Profilberichte

Unterhalb des Zeitachsendiagramms finden Sie einen Bereich mit den folgenden Registerkarten: Profilbericht, Aktuell und Stapelblockierung wird aufgehoben. Die Berichte werden automatisch aktualisiert, wenn Sie die Zeitachse und die Threadauswahl ändern. Für große Ablaufverfolgungen ist der Berichtsbereich möglicherweise zweitweise nicht verfügbar, während die Updates berechnet werden.

Registerkarte „Profilbericht“

Der Profilbericht umfasst zwei Filter:

  • Wenn Sie Einträge aus der Aufrufstruktur herausfiltern möchten, für die wenig Zeit aufgewendet wurde, geben Sie einen Filterwert zwischen 0 und 99 Prozent in das Feld Lärmreduzierung bei ein. Der Standardwert ist 2 Prozent.
  • Aktivieren Sie das Kontrollkästchen Nur eigenen Code, um die Aufrufstruktur für Ihren Code anzuzeigen. Deaktivieren Sie das Kontrollkästchen, um alle Aufrufstrukturen anzuzeigen.

Auf der Registerkarte Profilbericht werden Berichte zu den Kategorien und Links in der Legende angezeigt. Klicken Sie auf einen Eintrag im linken Bereich, um einen Bericht anzuzeigen:

  • Ausführung: Im Ausführungsbericht wird die Aufschlüsselung der Zeit angezeigt, die die Anwendung zur Ausführung aufgewendet hat.

    Wenn Sie die Codezeile finden möchten, für die Ausführungszeit aufgewendet wird, erweitern Sie die Aufrufstruktur, und wählen Sie dann im Kontextmenü für den Aufrufstruktureintrag Quelle anzeigen oder Aufrufsites anzeigen aus. Quelle anzeigen sucht die ausgeführte Codezeile. Über die Option Aufrufsites anzeigen wird die Codezeile gesucht, die die ausgeführte Zeile aufgerufen hat. Wenn nur eine Aufrufsite vorhanden ist, wird der Code hervorgehoben. Wenn es mehrere Aufrufsites gibt, wählen Sie die gewünschte im Dialogfeld aus, und klicken Sie anschließend auf Zu Quelle wechseln. Es ist oft am nützlichsten, die Aufrufsite mit den meisten Instanzen, der meisten Zeit oder beidem zu suchen. Weitere Informationen finden Sie unter Ausführungsprofilbericht.

  • Synchronisierung: Im Synchronisierungsbericht werden die Aufrufe, durch die die Synchronisierung blockiert wurde, sowie die Gesamtblockierungszeiten der einzelnen Aufruflisten angezeigt. Weitere Informationen finden Sie unter Synchronisierungszeit.

  • E/A: Im E/A-Bericht werden die Aufrufe, die E/A-Blockierungen verursachen, sowie die Gesamtblockierungszeiten der einzelnen Aufruflisten angezeigt. Weitere Informationen finden Sie unter E/A-Zeit (Threadansicht).

  • Standbymodus: Im Bericht zum Standbymodus werden die Aufrufe, die den Standbymodus blockiert haben, sowie die Gesamtblockierungszeiten der einzelnen Aufruflisten angezeigt. Weitere Informationen finden Sie unter Standbyzeit.

  • Speicherverwaltung: Im Speicherverwaltungsbericht werden die Aufrufe, bei denen die Speicherverwaltung blockiert wurde, sowie die Gesamtblockierungszeiten der einzelnen Aufruflisten angezeigt. Sie können anhand dieser Informationen Bereiche identifizieren, die eine übermäßige Paging oder Garbage Collection aufweisen. Weitere Informationen finden Sie unter Speicherverwaltungszeit.

  • Vorzeitige Entfernung: Im Bericht über die vorzeitige Entfernung werden die Instanzen, bei denen Prozesse auf dem System den aktuellen Prozess vorzeitig entfernt haben, sowie die einzelnen Threads angezeigt, die Threads im aktuellen Prozess ersetzt haben. Sie können diese Informationen verwenden, um die Prozesse und Threads zu identifizieren, die an der vorzeitigen Entfernung am stärksten beteiligt sind. Weitere Informationen finden Sie unter Zeit für die vorzeitige Entfernung.

  • Benutzeroberflächenverarbeitung: Im Bericht zur Benutzeroberflächenverarbeitung werden die Aufrufe, durch die die Benutzeroberflächenverarbeitung blockiert wird, sowie die Gesamtblockierungszeiten der einzelnen Aufruflisten angezeigt. Weitere Informationen finden Sie unter Benutzeroberflächenverarbeitungszeit.

  • Zusammenfassung pro Thread: Klicken Sie auf Zusammenfassung pro Thread, um ein Diagramm anzuzeigen, in dem der Zustand der Threads für das zum jeweiligen Zeitpunkt ausgewählte Zeitintervall angegeben ist. Farbcodierte Spalten zeigen die Gesamtzeit an, die die einzelnen Threads im ausführenden oder blockierten Zustand, in der E/A oder anderen Zuständen verbracht haben. Die Threads werden im unteren Bereich beschriftet. Wenn Sie die Zoomstufe im Zeitachsendiagramm anpassen, wird das Diagramm automatisch aktualisiert.

    Auf einigen Zoomstufen werden mehrere Threads möglicherweise nicht in dem Diagramm angezeigt. Wenn dies der Fall ist, werden im Bereich rechts Auslassungspunkte angezeigt (...). Wenn der gewünschte Thread nicht angezeigt wird, können Sie andere Threads ausblenden. Weitere Informationen finden Sie unter Zusammenfassungsbericht pro Thread.

  • Datenträgervorgänge: Klicken Sie auf Datenträgervorgänge, um die Prozesse und Threads anzuzeigen, die im aktuellen Prozess an den E/A-Vorgängen des Datenträgers beteiligt waren, und um anzuzeigen, welche Dateien davon betroffen waren (z.B. DLLs, die geladen wurden) und wie viele Byte gelesen wurden. Sie können diesen Bericht verwenden, um die Zeit auszuwerten, die während der Ausführung für den Zugriff auf Dateien aufgewendet wird, insbesondere, wenn der Prozess E/A-gebunden scheint. Weitere Informationen finden Sie unter Bericht über Datenträgervorgänge.

Registerkarte „Aktuell“

Diese Registerkarte zeigt die Aufrufliste für einen ausgewählten Punkt auf einem Threadsegment im Zeitachsendiagramm an. Die Aufruflisten werden abgeschnitten, um nur die Aktivität anzuzeigen, die mit der App verknüpft ist.

Registerkarte „Stapelblockierung wird aufgehoben“

Auf dieser Registerkarte wird angezeigt, welcher Thread die Blockierung für den ausgewählten Thread aufgehoben hat. Außerdem wird die Aufrufliste angegeben, deren Blockierung aufgehoben wird.

Kanäle (Threadansicht)

Die Parallelitätsschnellansicht zeigt vier Arten von Kanälen an: Threadkanäle, Datenträgerkanäle, Markerkanäle und GPU-Kanäle.

Threadkanäle

In einem Threadkanal wird der Threadzustand nach Farbe für einen einzigen Thread angezeigt. Wenn Sie den Cursor auf dem Kanalnamen ruhen lassen, wird die Startfunktion für den angegebenen Thread angezeigt. Die Parallelitätsschnellansicht erkennt mehrere Arten von Threads. Die am häufigsten verwendeten Arten werden in der folgenden Tabelle angezeigt.

Thread Beschreibung
Hauptthread Der Thread, der die App startete.
Arbeitsthread Ein Thread, der durch den Hauptthread der Anwendung erstellt wurde.
CLR-Arbeitsthread Ein Arbeitsthread, der von der Common Language Runtime (CLR) erstellt wurde.
Debuggerhilfe Ein Arbeitsthread, der von Visual Studio Debugger erstellt wurde.
ConcRT-Thread Ein Thread, der von der Microsoft Concurrency Runtime erstellt wurde.
GDI-Thread Ein Thread, der von GDIPlus erstellt wurde.
OLE/RPC-Thread Ein Thread, der als RPC-Arbeitsthread erstellt wurde.
RPC-Thread Ein Thread, der als RPC-Thread erstellt wurde.
Winsock-Thread Ein Thread, der als Winsock-Thread erstellt wurde.
Threadpool Ein Thread, der vom CLR-Threadpool erstellt wurde.

Datenträgerkanäle

Datenträgerkanäle entsprechen physischen Laufwerken auf dem Computer. Da für jedes physische Laufwerk im System eigene Kanäle für Lese- und Schreibvorgänge vorhanden sind, weist jedes Laufwerk zwei Kanäle auf. Die Datenträgernummern entsprechen Kernelgerätenamen. Ein Datenträgerkanal wird nur angezeigt, wenn Aktivität auf dem Datenträger vorhanden war.

Markerkanäle

Markerkanäle entsprechen Ereignissen, die durch die App und die Bibliotheken, die sie verwenden, generiert werden. Zum Beispiel generieren die Task Parallel Library, die Parallel Patterns Library und C++ AMP Ereignisse, die als Marker angezeigt werden. Jeder Markerkanal ist einer Thread-ID zugeordnet, die neben der Beschreibung des Kanals angezeigt wird. Die ID identifiziert den Thread, der das Ereignis generiert hat. Die Beschreibung des Kanals enthält den Namen des Anbieters der Ereignisablaufverfolgung für Windows (ETW), der die Ereignisse generierte. Wenn der Kanal Ereignisse der SDK für die Parallelitätsschnellansicht anzeigt, wird auch der Reihenname angezeigt.

GPU-Kanäle

GPU-Kanäle zeigen Informationen zu DirectX 11-Aktivität auf dem System an. Jede DirectX-Engine, die mit der Grafikkarte verbunden ist, hat einen separaten Kanal. Die einzelnen Segmente geben die Zeit an, die mit der Verarbeitung eines DMA-Pakets zugebracht wurde.

Kopieren einer Auswahl

Um die gesamte Aufrufliste aus der Registerkarte „Berichte“ zu kopieren, klicken Sie auf Kopieren. Jetzt können Sie die Aufrufliste in jedem Programm einfügen, das diese Aktion unterstützt.

Registerkarte „Aktuell“

Bei der Auswahl eines CPU-Threadsegments wird durch Klicken auf die Registerkarte Aktuell eine Aufrufliste (sofern vorhanden) angezeigt, die dem aktuellen Auswahlpunkt auf der Zeitachse am ehesten entspricht. In diesem Fall wird der Auswahlpunkt durch einen schwarzen Pfeil oder ein Caretzeichen oberhalb der Zeitachse dargestellt. Wenn ein Blockierungssegment ausgewählt wird, wird das Caretzeichen nicht angezeigt, weil keine Ausführung stattgefunden hat. Das Segment wird aber dennoch hervorgehoben, und eine Aufrufliste wird angezeigt.

Auf der Registerkarte Aktuell werden zudem Informationen zu DirectX-Aktivitätssegmenten, Marker und E/A-Zugriff angezeigt. Für DirectX-Aktivitätssegmente werden Informationen zur Verarbeitung von DMA-Paketen durch die Hardwarewarteschlange angezeigt. Für Marker werden Informationen zur Beschreibung sowie zum Markertyp angezeigt. Für den E/A-Zugriff werden Informationen zu Datei und Anzahl der gelesenen oder geschriebenen Bytes angezeigt.

Leeres Zeitachsensegment

In der Nebenläufigkeitsschnellansicht hängt der Grund dafür, dass ein Abschnitt der Zeitachse leer ist (einen weißen Hintergrund aufweist) von der Art des Kanals ab.

  • Bei einem CPU-Threadkanal ist der Grund der, dass der Thread in diesem Teil der Zeitachse nicht vorhanden war. Wenn Sie nach Informationen zu dem Thread suchen, finden Sie den Ausführungsabschnitt mithilfe des Zoomsteuerelements oder indem Sie horizontal scrollen.

  • Bei einem E/A-Kanal ist der Grund der, dass zu diesem Zeitpunkt für den Zielprozess kein Datenträgerzugriff durchgeführt wurde.

  • Bei einem DirectX-Kanal ist der Grund der, dass in diesem Teil der Zeitachse für den Zielprozess keine GPU-Arbeiten durchgeführt wurden.

  • Bei einem Markerkanal ist der Grund der, dass keine Marker generiert wurden.

Schaltfläche „Exportieren“ (Parallelitätsschnellansicht)

Mit der Schaltfläche Exportieren können Sie die Aufrufliste für Ihre Unterlagen oder zur Verwendung mit einem anderen Tool wie Microsoft Excel als CSV-Datei exportieren.

Nur mein Code (Threadansicht)

Mit dieser Option filtern Sie die Aufrufliste nach Ihrem Code sowie der Ebene der aufgerufenen Funktionen.

Durch Aktivieren dieser Option können Sie die Komplexität der Aufrufliste erheblich reduzieren, und es wird möglicherweise einfacher, ein bestimmtes Problem zu diagnostizieren.

In einigen Fällen kann durch diese Option auch der blockierende Aufruf herausgefiltert werden. Wenn Sie für diese Entscheidung die vollständigen Details zur Aufrufliste benötigen, löschen Sie diese Option, um die vollständige Aufrufliste verfügbar zu machen.

Verwalten von Kanälen

In der Threadansicht in der Parallelitätsschnellansicht können Sie die Kanäle für den Prozess so organisieren, dass Sie bestimmte Muster untersuchen können. Sie können Kanäle sortieren, sie nach oben und unten verschieben oder sie ausblenden und wieder einblenden.

Sortieren nach

Mit dem „Sortieren nach“-Steuerelement können Sie Threads nach verschiedenen Kriterien basierend auf dem aktuellen Zoomfaktor sortieren. Dies ist besonders nützlich, wenn Sie nach einem bestimmten Muster suchen. Sie können nach folgenden Kriterien sortieren:

Kriterien Definition
Startzeit Sortiert Threads nach ihren Startzeiten. Dies ist die standardmäßige Sortierreihenfolge.
Beendigungszeit Sortiert Threads nach ihren Endzeiten.
Ausführung Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für die Ausführung benötigt wird.
Synchronization Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für die Synchronisierung benötigt wird.
E/A Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für die E/A (Lesen und Schreiben von Daten) benötigt wird.
Standby Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für den Standbymodus benötigt wird.
Paging Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für das Paging benötigt wird.
Vorzeitige Entfernung Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für die vorzeitige Entfernung benötigt wird.
Benutzeroberflächenverarbeitung Sortiert Threads nach dem Prozentsatz der verstrichenen Zeit, die für die Benutzeroberflächenverarbeitung benötigt wird.

Ausgewählten Kanal nach oben oder unten verschieben

Diese Steuerelemente können Sie verwenden, um einen Kanal in der Liste nach oben oder unten zu verschieben. Beispielsweise können Sie verknüpfte Kanäle nebeneinander positionieren, damit Sie ein bestimmtes Muster oder eine threadübergreifende Beziehung untersuchen können.

Ausgewählten Kanal nach oben oder unten verschieben

Sie können ausgewählte Kanäle nach oben oder unten in der Liste verschieben, damit Sie ein bestimmtes Muster untersuchen können, oder einige Kanäle aus dem Weg schieben, wenn Sie andere Kanäle überprüfen.

Ausblenden ausgewählter Kanäle

Wählen Sie dieses Steuerelement aus, wenn Sie Kanäle ausblenden möchten. Wenn ein Thread z.B. eine hundertprozentige Synchronisierung für die Dauer Ihres verwalteten Prozesses darstellt, können sie ihn verbergen, während Sie andere Threads analysieren.

Hinweis

Ein Thread wird auch durch Ausblenden aus der Berechnungszeit entfernt, die in der aktiven Legende und in den Profilberichten angezeigt wird.

Alle Kanäle anzeigen

Dieses Steuerelement ist aktiv, wenn ein Kanal oder mehrere Kanäle ausgeblendet sind. Wenn Sie dieses auswählen, werden alle ausgeblendeten Elemente angezeigt und werden an die Zeitberechnung zurückgegeben.

Marker nach oben verschieben

Wenn eine Ablaufverfolgung Markerereignisse enthält, können Sie diesen Befehl zum Verschieben der Markerkanäle in den oberen Bereich der Zeitachse verwenden. Die relative Reihenfolge wird beibehalten.

Marker nach Threads gruppieren

Wenn die Ablaufverfolgung Markerereignisse enthält, können Sie diesen Befehl verwenden, um Markerkanäle unter dem Thread, der die Markerereignisse generiert hat, zu gruppieren. Die Datenträgerkanäle werden an das obere Ende der Kanalliste verschoben, und GPU-Kanäle werden ganz nach unten verschoben.

Aktivieren/Deaktivieren des Messmodus

Mithilfe dieses Tools können Sie die Dauer eines Zeitraums auf der Zeitachse genau messen. Klicken Sie auf die Schaltfläche „Messen“ (auf das Lineal), und bewegen Sie den Mauszeiger auf der Zeitachse, um den Messmodus zu aktivieren. Beachten Sie bei diesem Vorgang, dass der Bereich unterhalb des Zeigers in gelb hervorgehoben ist und die gemessene Zeit in der Symbolleiste im Bereich rechts neben der Schaltfläche angezeigt wird. Dieser Wert wird dynamisch berechnet, während Sie den Zeiger auf der Zeitachse bewegen, damit Sie unmittelbar sehen können, wie viel Zeit ein bestimmtes Ereignis in Anspruch nimmt. Wenn Sie die Maustaste loslassen, bleibt der Zeitwert weiterhin sichtbar.

Sie können den Messvorgang zwar wiederholen, allerdings wird immer nur der neuste Messwert angezeigt. Klicken Sie erneut auf die Schaltfläche „Messen“, um den Messmodus zu deaktivieren.

Prozentsatz der Rauschunterdrückung

Standardmäßig ist der Wert der Einstellung für den Prozentsatz der Rauschunterdrückung auf 2 festgelegt. In der Aufrufstruktur werden nur Einträge angezeigt, für die der Prozentsatz der inklusiven Zeit größer oder gleich dieser Einstellung ist. Indem Sie diese Einstellung ändern, können Sie die Anzahl der Einträge, die in der Aufrufstruktur angezeigt werden, festlegen. Wenn der Wert z.B. in 10 geändert wird, werden nur Einträge in der Aufrufstruktur angezeigt, deren inklusive Zeit größer oder gleich 10 % sind. Indem Sie den Wert der Einstellung erhöhen, können Sie den Fokus auf Einträge legen, die einen größeren Einfluss auf die Leistung Ihres Prozesses haben.

Auf sichtbarem Zeitraum basierender Bericht

Die Profilansicht stellt Berichte dar, die auf dem derzeit sichtbaren Zeitbereich und den Kanälen basieren. Um sich Details für unterschiedliche Datenteilmengen anzeigen zu lassen, klicken Sie in der Legende auf „Elemente“.

Weitere Informationen zu den Daten finden Sie in den Threadansichtsberichten.

Threadbereiter Konnektor

Wenn Sie auf ein Blockierungssegment klicken, um eine Aufrufliste und deren aufgehobene Stapelblockierung anzuzeigen, wird der threadbereite Connector womöglich ebenfalls angezeigt. Wenn das Ereignis zur Aufhebung der Blockierung auf einem anderen Thread im aktuellen Prozess aufgetreten ist, identifiziert der threadbereite Connector visuell den Thread sowie das Ausführungssegment, das den blockierten Thread aktiviert hat, um die Ausführung fortzusetzen.

Zeitachsen-Caretzeichen

Wenn Sie einen Punkt auf der Zeitachse eines ausführenden Threadsegments auswählen, wird darüber ein Zeitachsen-Caretzeichen angezeigt. Auf der aktuellen Stapelregisterkarte wird die Aufrufliste angezeigt, die der auf dem Segment angeklickten Stelle zeitlich am nächsten liegt. Das Caretzeichen wird verwendet, um die Aufrufliste, die unter der Registerkarte Aktuell angezeigt wird, dem Zeitpunkt zuzuordnen, an dem das Sampling durchgeführt wurde. Das Caretzeichen zeigt den genauen Speicherort der Aufrufliste an, die dem Speicherort am nächsten liegt, den der Benutzer ausgewählt hat.

Aufheben der Stapelblockierung

Wenn das derzeit ausgewählte Threadelement ein blockiertes Segment darstellt, das später mit der Ausführung begonnen hat, nachdem seine Blockierung von einem anderen Thread im aktuellen Prozess aufgehoben wurde, wird die Aufrufliste für den Thread, der die Blockierung aufgehoben hat, auf dieser Registerkarte angezeigt.

Sichtbares Zeitachsenprofil

Das sichtbare Zeitachsenprofil für die Threadblockierungsansicht stellt statistische Informationen und Links für Berichte bereit. Wenn Sie die Ansicht vergrößern oder verkleinern, horizontal Scrollen oder Kanäle aus- oder einblenden, ändern sich die Zahlen in der aktiven Legende entsprechend den gegenwärtig angezeigten Elementen. Um in der Legende einen Bericht zu einem Element anzuzeigen, klicken Sie auf das Element.

Zoomsteuerelement (Threadansicht)

Das Zoomsteuerelement ist ein Schieberegler, mit dem Sie die Zeitachse vergrößern und verkleinern können, damit Sie den Fokus auf Bereiche von besonderem Interesse legen können. Da dieses Steuerelement den Mittelpunkt der Zeitachsenansicht vergrößert, zentrieren Sie den relevanten Bereich zunächst, bevor Sie vergrößern.

Vergrößern durch Ziehen in der Zeitachsenansicht

Durch das Vergrößern durch Ziehen in der Zeitachsenansicht wird ein Bereich erstellt, der gelb hervorgehoben ist. Wenn Sie die Maustaste loslassen, wird die Zeitachsenansicht des ausgewählten Bereichs vergrößert.

Vergrößern und Verkleinern mithilfe des Mausrads

Klicken Sie auf einen beliebigen Punkt auf der Zeitachse (um sicherzustellen, dass sie den Mausfokus hat), und drücken Sie anschließend die STRG-TASTE, und bewegen Sie das Mausrad (nach vorne: vergrößern; nach hinten: verkleinern).