De prestaties van een cloudservice (klassiek) lokaal testen in de Azure Compute Emulator met behulp van Visual Studio Profiler

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe op Azure Resource Manager gebaseerde implementatiemodel Azure Cloud Services (uitgebreide ondersteuning).

Er zijn diverse hulpprogramma's en technieken beschikbaar voor het testen van de prestaties van cloudservices. Wanneer u een cloudservice naar Azure publiceert, kunt u Visual Studio profileringsgegevens laten verzamelen en deze vervolgens lokaal analyseren, zoals beschreven in Een Azure-toepassing profileren. U kunt ook diagnostische gegevens gebruiken om verschillende prestatiemeteritems bij te houden, zoals beschreven in Prestatiemeteritems gebruiken in Azure. Mogelijk wilt u uw toepassing ook lokaal profileren in de rekenemulator voordat u deze implementeert in de cloud.

In dit artikel wordt de CPU Sampling-methode van profilering behandeld, die lokaal kan worden uitgevoerd in de emulator. CPU-steekproeven zijn een profileringsmethode die niet erg opdringerig is. Met een aangewezen steekproefinterval maakt de profiler een momentopname van de aanroepstack. De gegevens worden gedurende een bepaalde periode verzameld en weergegeven in een rapport. Deze profileringsmethode geeft meestal aan waar in een rekenintensieve toepassing het meeste CPU-werk wordt uitgevoerd. Dit biedt u de mogelijkheid om u te concentreren op het 'dynamische pad' waar uw toepassing de meeste tijd doorbrengt.

1: Visual Studio configureren voor profilering

Ten eerste zijn er enkele Visual Studio-configuratieopties die nuttig kunnen zijn bij het profileren. Als u de profileringsrapporten wilt begrijpen, hebt u symbolen (.pdb-bestanden) voor uw toepassing en ook symbolen voor systeembibliotheken nodig. Zorg ervoor dat u verwijst naar de beschikbare symboolservers. Hiervoor kiest u in het menu Extra in Visual Studio achtereenvolgens Opties, Foutopsporing en Symbolen. Zorg ervoor dat Microsoft Symbol Servers wordt vermeld onder Locaties van symboolbestand (.pdb). U kunt ook verwijzen naar https://referencesource.microsoft.com/symbols, die mogelijk extra symboolbestanden bevat.

Symboolopties

Indien gewenst kunt u de rapporten die de profiler genereert vereenvoudigen door Just My Code in te stellen. Als Just My Code is ingeschakeld, worden functie-aanroepstacks vereenvoudigd, zodat volledig interne aanroepen naar bibliotheken en de .NET Framework worden verborgen in de rapporten. Kies Opties in het menu Extra. Vouw vervolgens het knooppunt Hulpprogramma's voor prestaties uit en kies Algemeen. Schakel het selectievakje in voor Alleen mijn code inschakelen voor profilerrapporten.

Opties voor Just My Code

U kunt deze instructies gebruiken voor een bestaand project of voor een nieuw project. Als u een nieuw project maakt om de hieronder beschreven technieken uit te proberen, kiest u een C# -cloudserviceproject en selecteert u een webrol en een werkrol.

Azure Cloud Service-projectrollen

Voeg bijvoorbeeld code toe aan uw project die veel tijd kost en een duidelijk prestatieprobleem laat zien. Voeg bijvoorbeeld de volgende code toe aan een werkrolproject:

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;
    }
}

Roep deze code aan vanuit de methode RunAsync in de door RoleEntryPoint afgeleide klasse van de werkrol. (Negeer de waarschuwing over het synchroon uitvoeren van de methode.)

private async Task RunAsync(CancellationToken cancellationToken)
{
    // TODO: Replace the following with your own logic.
    while (!cancellationToken.IsCancellationRequested)
    {
        Trace.TraceInformation("Working");
        Concatenator.Concatenate(10000);
    }
}

Bouw uw cloudservice en voer deze lokaal uit zonder foutopsporing (Ctrl+F5), waarbij de configuratie van de oplossing is ingesteld op Release. Dit zorgt ervoor dat alle bestanden en mappen worden gemaakt voor het lokaal uitvoeren van de toepassing en zorgt ervoor dat alle emulators worden gestart. Start de gebruikersinterface van de rekenemulator vanaf de taakbalk om te controleren of uw werkrol wordt uitgevoerd.

2: Koppelen aan een proces

In plaats van de toepassing te profileren door deze te starten vanuit de Visual Studio 2010 IDE, moet u de profiler koppelen aan een actief proces.

Als u de profiler aan een proces wilt koppelen, kiest u in het menu Analyserende optie Profiler en Koppelen/loskoppelen.

Optie Profiel koppelen

Zoek voor een werkrol het WaWorkerHost.exe proces.

WaWorkerHost-proces

Als uw projectmap zich op een netwerkstation bevindt, vraagt de profiler u om een andere locatie op te geven om de profileringsrapporten op te slaan.

U kunt ook koppelen aan een webrol door deze te koppelen aan WaIISHost.exe. Als er meerdere werkrolprocessen in uw toepassing zijn, moet u de processID gebruiken om deze te onderscheiden. U kunt programmatisch een query uitvoeren op de processID door toegang te krijgen tot het object Process. Als u deze code bijvoorbeeld toevoegt aan de methode Uitvoeren van de door RoleEntryPoint afgeleide klasse in een rol, kunt u het logboek in de gebruikersinterface van de compute-emulator bekijken om te weten met welk proces verbinding moet worden gemaakt.

var process = System.Diagnostics.Process.GetCurrentProcess();
var message = String.Format("Process ID: {0}", process.Id);
Trace.WriteLine(message, "Information");

Als u het logboek wilt weergeven, start u de gebruikersinterface van de rekenemulator.

De gebruikersinterface van de rekenemulator starten

Open het consolevenster van het werkrollogboek in de gebruikersinterface van de rekenemulator door op de titelbalk van het consolevenster te klikken. U ziet de proces-id in het logboek.

Proces-id weergeven

Voer de stappen uit in de gebruikersinterface van uw toepassing (indien nodig) om het scenario te reproduceren.

Als u de profilering wilt stoppen, kiest u de koppeling Profilering stoppen .

Optie Profileren stoppen

3: Prestatierapporten weergeven

Het prestatierapport voor uw toepassing wordt weergegeven.

Op dit moment stopt de profiler met uitvoeren, slaat de gegevens op in een VSP-bestand en wordt een rapport weergegeven met een analyse van deze gegevens.

Profiler-rapport

Als u String.wstrcpy ziet in het dynamische pad, klikt u op Alleen mijn code om de weergave te wijzigen zodat alleen gebruikerscode wordt weergegeven. Als u String.Concat ziet, drukt u op de knop Alle code weergeven.

U ziet dat de methode Concatenate en String.Concat een groot deel van de uitvoeringstijd in beslag nemen.

Analyse van rapport

Als u de samenvoegingscode voor tekenreeksen in dit artikel hebt toegevoegd, ziet u hiervoor een waarschuwing in de takenlijst. Mogelijk ziet u ook een waarschuwing dat er een overmatige hoeveelheid garbagecollection is, wat wordt veroorzaakt door het aantal tekenreeksen dat wordt gemaakt en verwijderd.

Prestatiewaarschuwingen

4: Wijzigingen aanbrengen en prestaties vergelijken

U kunt ook de prestaties voor en na een codewijziging vergelijken. Stop het actieve proces en bewerk de code om de bewerking tekenreekssamenvoeging te vervangen door het gebruik van StringBuilder:

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();
}

Voer nog een prestatieuitvoering uit en vergelijk de prestaties. Als de uitvoeringen zich in de Performance Explorer in dezelfde sessie bevinden, kunt u beide rapporten selecteren, het snelmenu openen en Prestatierapporten vergelijken kiezen. Als u wilt vergelijken met een uitvoering in een andere prestatiesessie, opent u het menu Analyseren en kiest u Prestatierapporten vergelijken. Geef beide bestanden op in het dialoogvenster dat wordt weergegeven.

Optie Prestatierapporten vergelijken

In de rapporten worden verschillen tussen de twee uitvoeringen gemarkeerd.

Vergelijkingsrapport

Gefeliciteerd U bent aan de slag gegaan met de profiler.

Problemen oplossen

  • Zorg ervoor dat u een Release-build profileert en start zonder foutopsporing.
  • Als de optie Koppelen/loskoppelen niet is ingeschakeld in het menu Profiler, voert u de wizard Prestaties uit.
  • Gebruik de gebruikersinterface van de rekenemulator om de status van uw toepassing weer te geven.
  • Als u problemen ondervindt bij het starten van toepassingen in de emulator of het koppelen van de profiler, sluit u de rekenemulator af en start u deze opnieuw. Als het probleem hiermee niet is opgelost, start u opnieuw op. Dit probleem kan optreden als u de rekenemulator gebruikt om actieve implementaties te onderbreken en te verwijderen.
  • Als u een van de profileringsopdrachten vanaf de opdrachtregel hebt gebruikt, met name de globale instellingen, moet u ervoor zorgen dat VSPerfClrEnv /globaloff is aangeroepen en dat VsPerfMon.exe is afgesloten.
  • Als u bij het nemen van steekproeven het bericht 'PRF0025: Er zijn geen gegevens verzameld' ziet, controleert u of het proces waaraan u hebt gekoppeld CPU-activiteit heeft. Toepassingen die geen rekenwerk uitvoeren, produceren mogelijk geen steekproefgegevens. Het is ook mogelijk dat het proces is afgesloten voordat er steekproeven zijn uitgevoerd. Controleer of de methode Uitvoeren voor een rol die u profileert, niet wordt beĆ«indigd.

Volgende stappen

Het instrumenteren van binaire Azure-bestanden in de emulator wordt niet ondersteund in de Visual Studio-profiler, maar als u de geheugentoewijzing wilt testen, kunt u die optie kiezen bij het profileren. U kunt ook gelijktijdigheidsprofilering kiezen, waarmee u kunt bepalen of threads tijd verspillen die concurreren om vergrendelingen, of interactieprofilering van lagen, waarmee u prestatieproblemen kunt opsporen bij interactie tussen lagen van een toepassing, meestal tussen de gegevenslaag en een werkrol. U kunt de databasequery's bekijken die uw app genereert en de profileringsgegevens gebruiken om uw gebruik van de database te verbeteren. Zie het blogbericht Walkthrough: Using the Tier Interaction Profiler in Visual Studio Team System 2010 (Walkthrough: Using the Tier Interaction Profiler in Visual Studio Team System 2010) voor informatie over profilering van laaginteractie.