Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Cloud Services (klassisch) ist jetzt ab dem 1. September 2024 für alle Kunden veraltet. Alle vorhandenen ausgeführten Bereitstellungen werden beendet und von Microsoft heruntergefahren, und die Daten sind ab Oktober 2024 dauerhaft verloren. In neuen Bereitstellungen sollte das neue auf Azure Resource Manager basierende Bereitstellungsmodell für Azure Cloud Services (erweiterter Support) verwendet werden.
Für das Testen der Leistung von Clouddiensten stehen verschiedene Tools und Techniken zur Verfügung. Wenn Sie einen Clouddienst in Azure veröffentlichen, können Sie Visual Studio zum Erfassen von Profildaten und zum lokalen Analysieren dieser Daten verwenden, wie in Erstellen eines Profils für eine Azure-Anwendung beschrieben. Sie können außerdem Diagnosen verwenden, um verschiedene Leistungsindikatoren nachzuverfolgen, wie in Verwenden von Leistungsindikatoren in Azure beschrieben. Sie können Ihre Anwendung auch lokal im Serveremulator profilieren, bevor Sie sie in der Cloud bereitstellen.
Dieser Artikel behandelt die CPU-Sampling-Methode der Profilerstellung, welche lokal im Emulator erfolgen kann. CPU-Sampling ist eine wenig intrusive Profilerstellungsmethode. Zu einem festgelegten Abtastintervall erstellt der Profiler einen Schnappschuss der Aufrufliste. Die Daten werden über einen bestimmte Zeitraum hinweg erfasst und in einem Bericht angezeigt. Diese Profiling-Methode zeigt tendenziell an, wo in einer rechenintensiven Anwendung die meiste CPU-Arbeit verrichtet wird, sodass Sie sich auf den „heißesten Pfad“ konzentrieren können, auf dem Ihre Anwendung die meiste Zeit verbringt.
Konfigurieren von Visual Studio für die Profilerstellung
Zuerst gibt es einige Visual Studio-Konfigurationsoptionen, die bei der Profilerstellung hilfreich sein könnten. Um Profilerstellungsberichte sinnvoll zu nutzen, benötigen Sie sowohl Symbole (PDB-Dateien) für Ihre Anwendung als auch Symbole für Systembibliotheken. Stellen Sie sicher, dass Sie auf die verfügbaren Symbolserver verweisen. Wählen Sie dazu im Menü Extras in Visual Studio Optionen, anschließend Debugging und dann Symbole aus. Überprüfen Sie, dass Microsoft Symbol Servers unter Speicherorte für Symboldateien (.pdb) aufgelistet ist. Sie können auch auf https://referencesource.microsoft.com/symbols verweisen, wo eventuell mehr Symboldateien verfügbar sind.
Wenn gewünscht, können Sie die Berichte, die der Profiler erstellt, vereinfachen, indem Sie auf "Nur eigenen Code" einstellen. Wenn Sie "Nur eigenen Code" aktiviert haben, werden die Funktionsaufrufstapel vereinfacht, sodass Aufrufe, die vollständig innerhalb der Bibliotheken und dem .NET Framework erfolgen, in den Berichten nicht angezeigt werden. Wählen Sie Optionen im Menü Extras. Erweitern Sie dann den Knoten Leistungstools, und wählen Sie Allgemein. Aktivieren Sie das Kontrollkästchen für "Nur eigenen Code" für Profilerberichte aktivieren.
Sie können diese Anweisungen mit einem vorhandenen Projekt oder einem neuen Projekt verwenden. Wenn Sie ein neues Projekt erstellen, um die unten beschriebenen Techniken auszuprobieren, wählen Sie ein C#-Projekt für Azure Cloud Services, eine Webrolle und eine Workerrolle aus.
Fügen Sie zum Beispiel zeitaufwendigen Code zu Ihrem Projekt hinzu, der zu offensichtlichen Leistungsproblemen führt. Fügen Sie zum Beispiel folgenden Code zu einem Worker-Rolle-Projekt hinzu:
public class Concatenator
{
public static string Concatenate(int number)
{
int count;
string s = "";
for (count = 0; count < number; count++)
{
s += "\n" + count.ToString();
}
return s;
}
}
Rufen Sie diesen Code von der RunAsync-Methode in der von RoleEntryPoint abgeleiteten Klasse der Workerrolle auf. (Ignorieren Sie die Warnung über die gleichzeitig ausgeführte Methode.)
private async Task RunAsync(CancellationToken cancellationToken)
{
// TODO: Replace the following with your own logic.
while (!cancellationToken.IsCancellationRequested)
{
Trace.TraceInformation("Working");
Concatenator.Concatenate(10000);
}
}
Erstellen Sie den Clouddienst und führen Sie ihn lokal ohne Debuggen (Strg+F5) aus, wobei die Lösungskonfiguration auf Releasefestgelegt ist. Durch diese Einstellung wird sichergestellt, dass alle Dateien und Ordner für das lokale Ausführen der Anwendung erstellt wurden und der Emulator gestartet wurde. Starten Sie die Compute-Emulator-Benutzeroberfläche über die Taskleiste, um sicherzustellen, dass die Worker-Rolle ausgeführt wird.
Anfügen an einen Prozess
Anstatt die Profilerstellung der Anwendung über die Visual Studio 2010-IDE-Schnittstelle zu starten, müssen Sie den Profiler an einen laufenden Prozess anfügen.
Wenn Sie den Profiler an einen Prozess anfügen möchten, wechseln Sie zum Menü Analysieren und wählen Profiler und dann Anfügen/Trennen aus.
Suchen Sie den Prozess "WaWorkerHost.exe" für eine Worker-Rolle.
Wenn sich der Projektordner auf einem Netzlaufwerk befindet, fragt Sie der Profiler nach einem anderen Speicherort für die Speicherung der Profilerstellungsberichte.
Sie können auch an eine Webrolle anhängen, indem Sie sich mit "WaIISHost.exe" verbinden. Wenn es mehrere Workerrollenprozesse in Ihrer Anwendung gibt, müssen Sie die "processID" verwenden, um sie zu unterscheiden. Sie können die "processID" programmgesteuert abfragen, indem Sie auf das Prozessobjekt zugreifen. Wenn Sie diesen Code z. B. der Run-Methode der von RoleEntryPoint abgeleiteten Klasse in einer Rolle hinzufügen, können Sie sich die Anmeldung in der Compute Emulator-Benutzeroberfläche ansehen, um herauszufinden, mit welchem Prozess eine Verbindung hergestellt werden muss.
var process = System.Diagnostics.Process.GetCurrentProcess();
var message = String.Format("Process ID: {0}", process.Id);
Trace.WriteLine(message, "Information");
Starten Sie die Serveremulator-Benutzeroberfläche, um das Protokoll anzuzeigen.
Öffnen Sie das Konsolenfenster des Worker-Role-Protokolls in der Compute Emulator-Benutzeroberfläche, indem Sie auf die Titelleiste des Konsolenfensters klicken. Sie sehen die Prozess-ID im Protokoll.
Führen Sie (falls erforderlich) nach dem Anfügen die Schritte auf der Benutzeroberfläche der Anwendung aus, um das Szenario zu reproduzieren.
Wenn Sie die Profilerstellung beenden möchten, wählen Sie den Link Beenden Sie die Profilerstellung aus.
Anzeigen der Leistungsberichte
Der Leistungsbericht für Ihre Anwendung wird angezeigt.
Zu diesem Zeitpunkt stoppt der Profiler die Ausführung, speichert die Daten in einer .vsp-Datei, und zeigt einen Bericht an, der eine Analyse dieser Daten enthält.
Wenn im Hot Path „String.wstrcpy“ angezeigt wird, wählen Sie „Nur eigenen Code“ aus, um die Ansicht auf nur Benutzercode umzustellen. Wenn „String.Concat“ angezeigt wird, sollten Sie die Schaltfläche Gesamten Code anzeigen auswählen.
Sie werden sehen, dass die Verkettungsmethode und "String.Concat" einen großen Teil der Ausführungszeit in Anspruch nehmen.
Wenn Sie den Verkettungscode für Zeichenfolgen in diesem Artikel hinzugefügt haben, sollte dafür eine Warnung in der Aufgabenliste angezeigt werden. Möglicherweise wird auch eine Warnung angezeigt, dass es zu einer übermäßigen Speicherbereinigung kommt, was durch die Anzahl der erstellten und entsorgten Zeichenfolgen verursacht wird.
Vornehmen von Änderungen und Vergleichen der Leistung
Sie können auch die Leistung vor und nach einer Codeänderung vergleichen. Beenden Sie den laufenden Prozess, und bearbeiten Sie den Code, um den Verkettungsvorgang für Zeichenfolgen durch die Verwendung von StringBuilder zu ersetzen:
public static string Concatenate(int number)
{
int count;
System.Text.StringBuilder builder = new System.Text.StringBuilder("");
for (count = 0; count < number; count++)
{
builder.Append("\n" + count.ToString());
}
return builder.ToString();
}
Führen Sie einen weiteren Leistungstest durch und vergleichen Sie anschließend die Ergebnisse. Im Leistungs-Explorer können Sie, wenn die Ausführungen sich in derselben Sitzung befinden, nur beide Berichte auswählen, das Kurzwahlmenü öffnen und Leistungsberichte vergleichenauswählen. Wenn Sie dies mit einer Ausführung in einer anderen Leistungssitzung vergleichen möchten, öffnen Sie das Menü Analysieren, und wählen Sie Leistungsberichte vergleichen. Geben Sie beide Dateien im Dialogfeld ein, das angezeigt wird.
Die Berichte heben die Unterschiede zwischen den beiden Ausführungen hervor.
Glückwunsch! Sie haben mit dem Profiler begonnen.
Problembehandlung
- Stellen Sie sicher, dass Sie ein Profil für eine Releaseversion erstellen, und starten Sie ohne Debugging.
- Wenn die Option „Anfügen/Trennen“ im Menü „Profiler“ nicht aktiviert ist, führen Sie den Leistungsassistenten aus.
- Verwenden Sie die Serveremulator-Benutzeroberfläche, um den Status der Anwendung anzuzeigen.
- Wenn Sie Probleme beim Starten der Anwendungen im Emulator oder beim Versuch haben, den Profiler anzuhängen, sollten Sie den Compute-Emulator herunterfahren und neu starten. Wenn das Problem dadurch nicht behoben wird, sollten Sie einen Neustart versuchen. Das Problem kann auftreten, wenn Sie den Serveremulator verwenden, um laufende Bereitstellungen anzuhalten und zu entfernen.
- Wenn Sie einen der Profilerstellungsbefehle über die Befehlszeile verwendet haben (insbesondere die globalen Einstellungen), stellen Sie sicher, dass Sie „VSPerfClrEnv /globaloff“ aufrufen und „VsPerfMon.exe“ beenden.
- Wenn beim Sampling die Meldung „PRF0025: Keine Daten gesammelt“ angezeigt wird, überprüfen Sie die CPU-Aktivität des Prozesses. Anwendungen, die keine Berechnungen vornehmen, generieren möglicherweise keine Samplingdaten. Es ist auch möglich, dass der Vorgang beendet wurde, bevor das Sampling erfolgte. Vergewissern Sie sich, dass die Run-Methode für eine Rolle, für die Sie ein Profil erstellen, nicht beendet wird.
Nächste Schritte
Die Instrumentierung von Azure-Binärdateien im Emulator wird im Visual Studio-Profiler nicht unterstützt. Wenn Sie aber die Speicherbelegung testen möchten, können Sie diese Option bei der Profilerstellung auswählen. Sie können zudem die Parallelitätsprofilerstellung auswählen, mit der Sie bestimmen können, ob Threads beim Kampf um Sperren Zeit verschwenden, oder die Profilerstellung für Ebeneninteraktion, mit der Sie Leistungsprobleme bei der Interaktion zwischen den Ebenen einer Anwendung aufspüren können, meistens zwischen der Datenebene und einer Workerrolle. Sie können die Datenbankabfragen, welche die Anwendung generiert, anzeigen sowie die Profilerstellungsdaten zur Verbesserung der Datenbankverwendung nutzen. Informationen zur Profilerstellung für Ebeneninteraktionen finden Sie im Blogbeitrag Walkthrough: Using the Tier Interaction Profiler in Visual Studio Team System 2010 (Exemplarische Vorgehensweise: Verwenden der Profilerstellung für Ebeneninteraktionen in Visual Studio Team System 2010).