Freigeben über


Threadansicht (Parallele Leistung)

Dies ist die detaillierteste und mit den meisten Funktionen ausgestattete Ansicht in der Parallelitätsschnellansicht. In dieser Ansicht können Sie feststellen, ob die Threads ausgeführt werden oder aufgrund von Synchronisierungs-, E/A- oder anderen Gründen blockiert sind.

Während der Profilanalyse werden von der Parallelitätsschnellansicht alle Betriebssystem-Kontextwechselereignisse für alle Anwendungsthreads untersucht. Kontextwechsel können aus vielen Gründen auftreten. Beispiele:

  • Ein Thread wird für einen Synchronisierungsprimitiven blockiert.

  • Das Quantum eines Threads läuft ab.

  • Von einem Thread erfolgt eine blockierende E/A-Anforderung.

In der Threadansicht wird jedem Kontextwechsel eine Kategorie zugewiesen, wenn die Ausführung eines Threads beendet wurde. Die Kategorien werden in der Legende im linken unteren Bereich der Anzeige dargestellt und in den entsprechenden Hilfethemen erläutert. Zur Kategorisierung von Kontextwechselereignissen wird die Aufrufliste des Threads nach bekannten blockierenden APIs durchsucht. Wenn keine übereinstimmenden Aufruflisten gefunden werden, wird der von Windows angegebene Wartegrund verwendet. Auch wenn es eigentlich richtig ist, kann die Kategorie Windows statt auf der Erwartung oder Absicht des Benutzers auf einem Implementierungsdetail basieren. Beispielsweise meldet Windows Blockierungen für ein systemeigenes Slim Reader/Writer Lock als E/A und nicht als Synchronisierung. In solchen Fällen sollten Sie die Ursache für ein beliebiges blockierendes Ereignis durch Untersuchen der Aufruflisten identifizieren können, die Kontextwechselereignissen entsprechen.

In der Threadansicht werden auch Abhängigkeiten zwischen Threads angezeigt. Wenn Sie beispielsweise einen Thread identifizieren, der in einem Synchronisierungsobjekt blockiert ist, wird oft auch angezeigt, welcher Thread die Blockierung aufgehoben hat und welche Aktion dieser Thread zu diesem Zeitpunkt ausgeführt hat. Hierzu wird die zugehörige Aufrufliste angezeigt, wenn die Blockierung von besagtem Thread aufgehoben wurde.

Und schließlich werden bei der Ausführung von Threads Samplings gesammelt, sodass Sie analysieren können, welcher Code während eines Ausführungssegments von einem oder mehreren Threads ausgeführt wird. Zusätzlich zur samplingbasierten Darstellung der Threadausführung stehen in dieser Ansicht auch Ausführungsberichte zur Profilerstellung in der Aufruflistenstruktur sowie Blockierungsberichte zur Verfügung.

Verwendung

Die Threadansicht soll mehreren Zwecken dienen. Einige typische Verwendungsfälle:

  • Identifizieren von Gründen, warum die Benutzeroberfläche (User Interface, UI) einer Anwendung in bestimmten Ausführungsphasen nicht reagiert

  • Identifizieren der Zeitspanne, die auf das Blockieren der Synchronisierung, E/A, Seitenfehler usw. entfällt

  • Identifizieren des Grades an Interferenz mit anderen Prozessen, die auf dem System ausgeführt werden

  • Identifizieren von Problemen mit dem Lastenausgleich bei einer parallelen Ausführung

  • Identifizieren der Gründe für nicht optimale oder nicht vorhandene Skalierbarkeit (z. B. Gründe dafür, warum sich die Leistung einer parallelen Anwendung nicht verbessert, wenn mehr logische Kerne im System verfügbar sind)

  • Verstehen des Parallelitätsgrades in der Anwendung, um die Parallelisierung zu unterstützen

  • Verstehen der Abhängigkeiten zwischen Arbeitsthreads und kritischen Pfaden der Ausführung

Im Rest dieses Abschnitts wird ein empfohlenes Verwendungsmuster erläutert, um die Verwendung dieser Ansicht so produktiv wie möglich zu machen. Zunächst ist es empfehlenswert, sich mithilfe der CPU-Auslastungsansicht auf eine bestimmte, relevante Phase der Prozessausführung zu konzentrieren. Die Verwendung der Anwendung Unterstützung für Szenariomarkierungen kann dabei von erheblichem Nutzen sein. Sobald Sie die Ansicht eines relevanten Ausführungszeitfensters vergrößert haben, können Sie die Threadansicht auswählen.

Identifizieren und Eingrenzen eines relevanten Bereichs

In der Threadansicht wird eine Zeitachsenansicht mit der Zeit auf der x-Achse angezeigt. Auf der y-Achse werden zwei E/A-Kanäle dargestellt, einer für Lesen und einer für Schreiben, für jedes physische Festplattenmedium im System, das während der Profilsammlung in irgendeiner Weise aktiv war. Unter den Datenträgerkanälen wird für jeden Thread des Prozesses ein Kanal angezeigt. Zu Beginn werden die Threads in der Reihenfolge ihrer Erstellung sortiert, sodass der Hauptanwendungsthread an erster Stelle steht. Mit der Sortieroption in der linken oberen Ecke der Ansicht können Sie Threads nach einem anderen Kriterium sortieren (beispielsweise nach dem größten Anteil an der Ausführung).

Danach können Sie Threads ausblenden, von denen keine Aufgaben im relevanten Szenario ausgeführt werden. Wählen Sie hierzu in der linken Spalte die entsprechenden Namen aus, und klicken Sie dann auf der Symbolleiste auf das Symbol Ausgewählte Threads ausblenden. Solche Threads können aus vielen Gründen vorhanden sein. Es kann sich dabei z. B. um inaktive Threads eines Threadpools handeln. Solche Threads werden üblicherweise vollständig blockiert (in der Regel aufgrund der Synchronisierung). Es empfiehlt sich, sie aus der Ansicht zu entfernen, damit sie die Statistik in den Berichten nicht durch irrelevante Informationen verfälschen.

Mithilfe des Ausführungsaufteilungsberichts können Sie weitere ausblendbare Threads ermitteln. Klicken Sie zum Anzeigen des Ausführungsaufteilungsdiagramms in der aktiven Legende auf Zusammenfassung pro Thread. Dieses Diagramm zeigt für das aktuell angezeigte Zeitfenster die Aufteilung der Threadzustände für Threads in der Anwendung an. Zur Unterstützung der Skalierbarkeit in diesem Diagramm ist die Anzahl der angezeigten Threads begrenzt. Das Diagramm enthält deshalb nicht immer Daten für alle Threads in der Anwendung. Ist dies der Fall, werden ganz rechts Auslassungspunkte angezeigt.

Nachdem Sie die Analyse auf eine für Sie relevante Region eingegrenzt und die für Sie relevanten Threads ausgewählt haben, können Sie mit der Leistungsanalyse beginnen. In den folgenden Abschnitten werden die verschiedenen Tools beschrieben, die Ihnen dazu zur Verfügung stehen.

Details zur Threadblockierung

Die Gründe für Bereiche, die Threads blockieren, verstehen Sie möglicherweise besser, wenn Sie den Mauszeiger auf einem dieser Bereiche ruhen lassen oder diesen durch Klicken mit der linken Maustaste auswählen. Wenn Sie die Maus auf einem blockierenden Bereich ruhen lassen, wird eine QuickInfo mit allgemeinen Informationen zum blockierenden Ereignis angezeigt, beispielsweise die Kategorie, eine blockierende API (sofern vorhanden), die Startzeit der Region oder die Dauer der Blockierung. Für die Kategorie der vorzeitigen Entfernung werden auch die Prozess-ID und die Thread-ID in dem Prozess angezeigt, der für die CPU geplant war, als der Thread vom Kernel beendet wurde. Sie können auch einen blockierenden Bereich in einem relevanten Kanal auswählen. Hierdurch wird der aktuelle Stapel im unteren Fenster angezeigt. Auf der Registerkarte Aktueller Stapel wird zusätzlich zu den Informationen aus der QuickInfo die Aufrufliste angezeigt, die die Blockierung des Threads zur Folge hatte. Durch eine Untersuchung der Aufrufliste können Sie den Grund für das den Thread blockierende Ereignis bestimmen. Standardmäßig werden die vollständigen Aufruflisten in dieser Ansicht angezeigt, einschließlich Benutzer- und Kernelstapel. Wenn mit dem Tool eine bestimmte API als Ursache ermittelt werden kann, wird die Aufrufliste nach diesem Frame abgeschnitten. Wenn der Stammfunktionsaufruf, durch den die Blockierung verursacht wurde, nicht ermittelt werden kann, wird die gesamte Aufrufliste verfügbar gemacht, um dem Benutzer die Möglichkeit zu geben, die Aufrufliste zu untersuchen und eine solche Bestimmung selbst vorzunehmen.

Ein Ausführungspfad führt häufig zu mehreren blockierenden Ereignissen. Oft ist es auch hilfreich, die kumulativen Blockierungsverzögerungen nach Aufrufliste geordnet nachzuvollziehen. Zu diesem Zweck steht für jede Blockierungskategorie ein auf der Aufrufstruktur basierender Profilbericht zur Verfügung. Sie können das Profil anzeigen, indem Sie einen der blockierenden Kategorielegendeneinträge links auswählen. Diese Berichte ermöglichen Ihnen, schnell zu Prioritäten für Ihr Eingreifen festzulegen, um die Leistung der Anwendung zu verbessern.

Abhängigkeiten zwischen Threads

In der Parallelitätsschnellansicht werden Abhängigkeiten zwischen blockierenden Threads im Prozess angezeigt. Klicken Sie zum Ermitteln des Threads, durch dessen Aktionen die Blockierung eines relevanten Threads aufgehoben wurde, auf das relevante Blockierungssegment. Kann der Thread, von dem die Blockierung aufgehoben wurde, ermittelt werden, wird das nach dem blockierenden Segment ausgeführte Segment durch eine Linie mit dem anderen Thread verbunden. Diese Linie zeigt, wie die Blockierung des ausgewählten Threads durch einen anderen Thread aufgehoben wurde. Zudem wird die relevante Aufrufliste auf der Registerkarte Stapelblockierung wird aufgehoben angegeben. So können Sie einen blockierten Thread schnell identifizieren, die beabsichtigten Aktionen des Threads ermitteln und feststellen, wieso er letztlich doch ausgeführt werden konnte.

Details zur Threadausführung

Häufig ist es hilfreich, den Code zu bestimmen, der von Threads während der Anwendungsausführung ausgeführt wird. Diese Bereiche werden im Zeitachsendiagramm als grüne Segmente dargestellt. Zwei Funktionen sind dabei hilfreich.

Erstens: Wenn Sie auf der Zeitachse auf ein Ausführungssegment klicken, wird versucht, die nächste Samplingprofil-Aufrufliste zu finden. Bei Erfolg wird über der Position im Ausführungsblock, an der das Sampling erfasst wurde, ein schwarzes Caretzeichen angezeigt. Die Aufrufliste selbst wird auf der Registerkarte Aktueller Stapel angezeigt. Sie können andere Samplings auswählen, indem Sie an anderer Stelle auf die Ausführungssegmente klicken. Gelegentlich kann kein Sampling gefunden werden. Dies ist üblicherweise auf die 1-ms-Periode zurückzuführen, mit der Samplingprofile erfasst werden. Wenn beispielsweise ein Ausführungssegment kürzer als eine Millisekunde ist, kann keine Aufrufliste erfasst werden. Die Samplinghäufigkeit kann zwar nicht geändert werden, eine Millisekunde ist jedoch ein guter Kompromiss zwischen Genauigkeit und Ausführungsmehraufwand.

Zweitens: Der Samplingprofilbericht bildet zusammen mit der zugehörigen Aufrufstrukturansicht eine wichtige Funktion, um herauszufinden, auf welche Elemente die Ausführungszeit entfällt. Auf diese Funktion können Sie zugreifen, indem Sie in der aktiven Legende auf das Element Ausführung klicken. Das Ausführungsprofil stellt einen Samplingbericht für alle aktivierten (nicht ausgeblendeten) Threads in der aktuellen Ansicht bereit, die nach dem Zeitbereich im Fenster gefiltert sind.

Zeitachsendiagramm

Im Zeitachsendiagramm wird die Aktivität aller Threads im Prozess sowie aller physischen Laufwerke auf dem Hostcomputer angezeigt. Sie können die Ansicht in der Zeitachse vergrößern, indem Sie den Mauszeiger ziehen, den Zoomschieberegler auf der Symbolleiste des Fensters verwenden oder die STRG-TASTE gedrückt halten, während Sie das Mausrad drehen. Führen Sie den Mauszeiger auf eine der horizontalen Leisten oder auf ein Segment, um Kategorie, Startzeit und Dauer für den jeweiligen Punkt des Threads anzuzeigen. Klicken Sie auf eines der Segmente, um die Aufrufliste auf der Registerkarte Aktueller Stapel im unteren Bildschirmbereich anzuzeigen.

Im Zeitachsendiagramm gibt die Farbe den Status eines Threads zu einer bestimmten Zeit an. Beispiele: Grüne Segmente werden ausgeführt, rote Segmente sind zur Synchronisierung blockiert, gelbe Segmente wurden vorzeitig entfernt und violette Segmente sind mit Geräte-E/A beschäftigt. Diese Ansicht ist hilfreich, wenn der Lastenausgleich einer Gruppe von Threads untersucht werden soll, die sich in einer parallelen Schleife befinden oder parallele Aufgaben ausführen. Wenn ein oder mehrere Threads wesentlich mehr Zeit als andere Threads benötigen, bis sie abgeschlossen werden, kann dies auf eine unausgeglichene Arbeitslast und damit auf eine Möglichkeit hindeuten, die Leistung des Programms zu verbessern, indem die Last gleichmäßig auf die Threads verteilt wird.

Sie können außerdem anhand des Zeitachsendiagramms Abhängigkeiten zwischen Threads und temporäre Beziehungen zwischen blockierenden und blockierten Threads untersuchen. Anhand des vertikalen Segments an diesem Punkt auf der Zeitachse können Sie jederzeit feststellen, wie viele Threads gerade ausgeführt werden. Wenn zu dem Zeitpunkt nur ein Thread grün dargestellt (also ausgeführt wird), werden die vorhandenen Parallelitätsmöglichkeiten des Systems von der Anwendung nicht voll ausgeschöpft. Auf der Symbolleiste können Sie auf die Nach-unten- und Nach-oben-Schaltflächen klicken, um einzelne Threads zu sortieren und zu verschieben, oder aber nicht relevante Threads mit der Schaltfläche Threads ausblenden ausblenden.

Profilberichte

Unter dem Zeitachsendiagramm befindet sich ein Fenster im Registerkartenformat mit aktiver Legende und einigen Berichten. Profilberichte werden automatisch aktualisiert, wenn die Threadansicht durch Vergrößern/Verkleinern, Ausführen eines Bildlaufs oder Ausblenden/Einblenden von Threads geändert wird. Bei umfangreicheren Ablaufverfolgungen wird das Berichtsfenster während der Berechnung der aktualisierten Berichte abgeblendet. Für jeden Bericht stehen zwei Filteranpassungen zur Verfügung: Rauschunterdrückung und Nur mein Code. Über die Rauschunterdrückung können irrelevante Aufrufstruktureinträge herausgefiltert werden, für die nur wenig Zeit aufgewendet wird. Der Wert beträgt standardmäßig 2 %, kann aber frei zwischen 0 % und 99 % festgelegt werden. Mithilfe des Kontrollkästchens Nur mein Code können Sie Aufrufstruktureinträge anderer Benutzer herausfiltern oder anzeigen. Die verfügbaren Berichte werden im folgenden Abschnitt aufgelistet.

Profilbericht

Über diese Registerkarte können Sie auf den aktuellen Profilbericht zugreifen. Durch Klicken auf einen Eintrag in der aktiven Legende entscheiden Sie, welcher Profilbericht angezeigt wird. Im folgenden Abschnitt werden die verfügbaren Profilberichte aufgeführt, beginnend mit Ausführung.

Aktueller Stapel

Diese Registerkarte zeigt die Aufruflisten für ein ausgewähltes Threadsegment im Detaildiagramm an. Die Aufruflisten werden abgeschnitten, um Aktivitäten in den Mittelpunkt zu rücken, die sich direkt auf Ihr Programm beziehen. Im Auswahlfenster sind die Informationen zum derzeit ausgeführten Thread sofort sichtbar.

Stapelblockierung wird aufgehoben

Klicken Sie auf Stapelblockierung wird aufgehoben, um zu sehen, welcher Thread die Blockierung dieses Threads aufgehoben hat und in welcher Codezeile dies erfolgte.

Ausführung

Im Ausführungsprofilbericht wird eine ausführliche Tabelle mit dem Prozentsatz der Zeit angezeigt, die auf jeden Thread in den verschiedenen Status wie Ausführung, E/A, Speicherverwaltung usw. entfällt.

Klicken Sie auf das Struktursteuerelement neben einem beliebigen Aufrufstruktureintrag, der für Sie von Interesse ist, um ausführliche Daten anzuzeigen und die Codezeile zu suchen, auf die die Ausführungszeit entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird die Zeile in der Quelle gesucht, wenn Sie auf Aufrufsites anzeigen klicken, wird die Codezeile gesucht, die den Aufruf verursacht hat. Wenn nur eine Aufrufsite vorhanden ist, wird beim Klicken die markierte Codezeile für die Aufrufsite gesucht. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld zum Auswählen eines Eintrags angezeigt. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu suchen. Weitere Informationen finden Sie unter Ausführungsprofilbericht.

Synchronisierung

Der Synchronisierungsbericht zeigt die Aufrufe, die Blockierungen der Synchronisierung verursachen, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen.

Klicken Sie auf das Struktursteuerelement neben einem beliebigen Aufrufstruktureintrag, der für Sie von Interesse ist, um ausführliche Daten anzuzeigen und die Codezeile zu suchen, auf die die Synchronisierungszeit entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird die Zeile in der Quelle gesucht, wenn Sie auf Aufrufsites anzeigen klicken, wird die Codezeile gesucht, die den Aufruf verursacht hat. Wenn nur eine Aufrufsite vorhanden ist, wird beim Klicken eine Verbindung mit der markierten Codezeile für die Aufrufsite hergestellt. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld zum Auswählen eines Eintrags angezeigt. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter Synchronisierungszeit.

E/A

Der E/A-Bericht zeigt die Aufrufe, die E/A-Blockierungen verursachen, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen.

Klicken Sie auf das Struktursteuerelement neben einer beliebigen Aufrufliste, die für Sie von Interesse ist, um detaillierte Daten anzuzeigen und die Codezeile zu suchen, auf die die E/A-Zeit entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird die Zeile in der Quelle gesucht, wenn Sie auf Aufrufsites anzeigen klicken, wird die Codezeile gesucht, die den Aufruf verursacht hat. Wenn nur eine Aufrufsite vorhanden ist, wird beim Klicken eine Verbindung mit der markierten Codezeile für die Aufrufsite hergestellt. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld zum Auswählen eines Eintrags angezeigt. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter E/A-Zeit (Threadansicht).

Sleep

Der Bericht zum Standbymodus zeigt die Aufrufe, die Blockierung des Standbymodus verursachen, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen.

Klicken Sie auf das Struktursteuerelement neben einer beliebigen Aufrufliste, die für Sie von Interesse ist, um detaillierte Daten anzuzeigen und die Codezeile zu suchen, auf die die Standbyzeit entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird die Zeile in der Quelle gesucht, wenn Sie auf Aufrufsites anzeigen klicken, wird die Codezeile gesucht, die den Aufruf verursacht hat. Wenn nur eine Aufrufsite vorhanden ist, wird beim Klicken eine Verbindung mit der markierten Codezeile für die Aufrufsite hergestellt. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld angezeigt, in dem ein Eintrag ausgewählt wird. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter Standbyzeit.

Paging

Der Pagingbericht enthält die Aufrufe, bei denen eine Blockierung der vorzeitigen Entfernung aufgetreten ist, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen. Bei diesem Blockierungsbericht können weniger leicht sinnvolle Aktionen ausgeführt werden, da die vorzeitige Entfernung in der Regel vom Betriebssystem und nicht vom Code auf den Prozess angewendet wird. Im Bericht wird angezeigt, welche Arten vorzeitiger Entfernungen aufgetreten sind, wo diese aufgetreten sind und wie lange der Prozess in einem angegebenen Zustand vorzeitiger Entfernung geblieben ist.

Klicken Sie auf das Struktursteuerelement neben einem beliebigen Aufrufstruktureintrag, der für Sie von Interesse ist, um ausführliche Daten anzuzeigen und die Codezeile zu suchen, auf die die Zeit für die vorzeitige Entfernung entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird zur entsprechenden Zeile im Quellcode gewechselt. Durch Klicken auf Aufrufsites anzeigen wird zur entsprechenden Codezeile mit dem zugehörigen Aufruf gewechselt. Wenn nur eine Aufrufsite vorhanden ist, wechseln Sie durch Klicken direkt zur markierten Codezeile für die Aufrufsite. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld angezeigt, in dem ein Eintrag ausgewählt wird. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter Speicherverwaltungszeit.

Vorzeitige Entfernung

Der Pagingbericht enthält die Aufrufe, bei denen eine Blockierung der vorzeitigen Entfernung aufgetreten ist, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen. Bei diesem Blockierungsbericht können weniger leicht sinnvolle Aktionen ausgeführt werden, da die vorzeitige Entfernung in der Regel vom Betriebssystem und nicht vom Code auf den Prozess angewendet wird. Im Bericht wird angezeigt, welche Arten vorzeitiger Entfernungen aufgetreten sind, wo diese aufgetreten sind und wie lange der Prozess in einem angegebenen Zustand vorzeitiger Entfernung geblieben ist.

Klicken Sie auf das Struktursteuerelement neben einer beliebigen Aufrufliste, die für Sie von Interesse ist, um detaillierte Daten anzuzeigen und die Codezeile zu suchen, auf die die Zeit für die vorzeitige Entfernung entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird zur entsprechenden Zeile im Quellcode gewechselt. Durch Klicken auf Aufrufsites anzeigen wird zur entsprechenden Codezeile mit dem zugehörigen Aufruf gewechselt. Wenn nur eine Aufrufsite vorhanden ist, wechseln Sie durch Klicken direkt zur markierten Codezeile für die Aufrufsite. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld angezeigt, in dem ein Eintrag ausgewählt wird. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter Zeit für die vorzeitige Entfernung.

Benutzeroberflächenverarbeitung

Der Bericht zur Benutzeroberflächenverarbeitung enthält die Aufrufe, durch die eine Blockierung der Benutzeroberflächenverarbeitung verursacht wird, sowie die aggregierten Blockierungszeiten der einzelnen Aufruflisten. Anhand dieser Informationen können Sie problematische Bereiche erkennen und untersuchen.

Klicken Sie auf das Struktursteuerelement neben einem beliebigen Aufrufstruktureintrag, der für Sie von Interesse ist, um ausführliche Daten anzuzeigen und die Codezeile zu suchen, auf die die Zeit für die Benutzeroberflächenverarbeitung entfällt. Sobald Sie einen relevanten Aufrufstruktureintrag gefunden haben, klicken Sie mit der rechten Maustaste darauf. Ein Kontextmenü mit den Einträgen Quelle anzeigen und Aufrufsites anzeigen wird angezeigt. Wenn Sie auf Quelle anzeigen klicken, wird die Zeile in der Quelle gesucht, wenn Sie auf Aufrufsites anzeigen klicken, wird die Codezeile gesucht, die den Aufruf verursacht hat. Wenn nur eine Aufrufsite vorhanden ist, wird beim Klicken eine Verbindung mit der markierten Codezeile für die Aufrufsite hergestellt. Wenn mehrere Aufrufsites vorhanden sind, wird ein Dialogfeld angezeigt, in dem ein Eintrag ausgewählt wird. Wenn Sie auf die Schaltfläche Zu Quelle wechseln klicken, wird die markierte Aufrufsite gesucht. Häufig empfiehlt es sich, die Quelle für die Aufrufsite mit den meisten Instanzen und/oder dem höchsten Zeitaufwand auszuwählen und zu mit dieser eine Verbindung herzustellen. Weitere Informationen finden Sie unter Benutzeroberflächenverarbeitungszeit.

Zusammenfassung pro Thread

Diese Registerkarte zeigt eine farbcodierte Spaltenansicht der Gesamtzeit, die auf jeden Thread pro Zustand entfällt, z. B. Ausführung, Blockierung, E/A usw. Die Spalten sind unten beschriftet. In der Standardzoomstufe befindet sich der Hauptthread in der Spalte ganz links. Wenn Sie im Detaildiagramm die Zoomstufe anpassen, werden die Berichte auf den Registerkarten automatisch mit der neuen Zeitskala aktualisiert. Zur Verbesserung der Skalierbarkeit in diesem Diagramm ist die Anzahl der angezeigten Threads eingeschränkt. Daher zeigt das Diagramm in bestimmten Fällen nicht für alle Threads in der Anwendung Daten, gibt diese Einschränkung jedoch durch Anzeige von Auslassungspunkten ganz rechts an. Sollte der gewünschte Thread in diesem Diagramm nicht vorhanden sein, können Sie irrelevante Threads ausblenden, bis der gewünschte Thread im Diagramm angezeigt wird. Weitere Informationen finden Sie unter Zusammenfassungsbericht pro Thread.

Dateivorgänge

Auf dieser Registerkarte werden die Threads angezeigt, die am Datenträger-E/A beteiligt waren, sowie die betroffenen Dateien. Dazu zählen geladene DLLs, die Anzahl der gelesenen Bytes und weitere Informationen. Dieser Bericht ermöglicht die Auswertung der Zeit, die während der Ausführung für den Dateizugriff aufgewendet wurde. Dies gilt besonders, wenn der Prozess E/A-gebunden scheint. Weitere Informationen finden Sie unter Bericht über Dateioperationen (Threadansicht).

Siehe auch

Konzepte

Parallelitätsschnellansicht