Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Trådvyn är den mest detaljerade och funktionsrika vyn i Concurrency Visualizer. I vyn Trådar kan du identifiera vilka trådar som kör kod under ett körningssegment och analysera om trådar körs eller blockeras på grund av synkronisering, I/O eller andra orsaker. Rapporter om trådar visar även profilering av anropsstackträdets körning och avblockering av trådar.
Medan trådar körs samlar Concurrency Visualizer in exempel. När en tråd har slutat köras undersöker visualiseraren alla kontextväxlingshändelser för operativsystemet för tråden. Kontextväxlar kan inträffa eftersom:
- En tråd blockeras av en synkroniseringsprimitiv.
- Tidskvantumet för en tråd upphör att gälla.
- En tråd gör en blockerande I/O-begäran.
Concurrency Visualizer kategoriserar tråd- och kontextväxlingshändelser och söker i anropsstackarna med trådar efter välkända blockerande API:er. Den visar trådkategorierna i den aktiva förklaringen längst ned till vänster i vyn Trådar . I de flesta fall kan du identifiera rotorsaken till en blockerande händelse genom att undersöka anropsstackarna som motsvarar kontextväxlingshändelser.
Om det inte finns någon matchning mellan samtalsstacken använder Concurrency Visualizer den vänteorsak som tillhandahålls av Windows. Windows-kategorin kan dock baseras på en implementeringsinformation och kanske inte återspeglar användarens avsikt. Windows rapporterar till exempel vänteorsaken till blockering på ett inbyggt smalt lås för läsare och skrivare som I/O i stället för synkronisering.
Trådvyn visar också beroenden mellan trådar. Om du till exempel identifierar en tråd som är blockerad på ett synkroniseringsobjekt kan du hitta den tråd som avblockerade den. Du kan undersöka anropsstacken för avblockeringstråden vid den tidpunkt då den avblockerade den andra.
Du kan använda vyn Trådar för att:
- Identifiera orsaker till att användargränssnittet (UI) för en app inte svarar under vissa körningsfaser.
- Fastställ hur lång tid det tar att blockera synkronisering, I/O, sidfel och andra händelser.
- Identifiera graden av interferens från andra processer som körs i systemet.
- Identifiera problem med belastningsutjämning för parallell körning.
- Hitta orsakerna till suboptimal eller icke-existerande skalbarhet. Varför förbättras till exempel inte prestandan för en parallell app när fler logiska kärnor är tillgängliga.
- Förstå graden av samtidighet i appen för att underlätta parallellisering.
- Identifiera beroenden mellan arbetstrådar och kritiska exekveringsvägar.
Använd vyn Trådar
Starta Concurrency Visualizer genom att välja Analysera>samtidighetsvisualiserare och sedan välja ett alternativ, till exempel Starta ny process.
Concurrency Visualizer startar appen och samlar in en spårning tills du väljer Stoppa samling. Visualiseraren analyserar sedan spårningen och visar resultatet på spårningsrapportsidan.
Välj fliken Trådar uppe till vänster i rapporten för att öppna vyn Trådar .
Välj tidsintervall och trådar för att starta en prestandaanalys.
Tidslinjeanalys
Den övre delen av vyn Trådar är en tidslinje. Tidslinjen visar aktiviteten för alla trådar i processen och alla fysiska diskenheter på värddatorn. Den visar även GPU-aktivitet och markörhändelser.
På tidslinjen är x-axeln tid och på y-axeln finns flera kanaler:
- Två I/O-kanaler för varje diskenhet i systemet, en kanal för läsningar och en för skrivningar.
- En kanal för varje tråd i processen.
- Markörkanaler, om det finns markörhändelser i spårningen. Markörkanaler visas först under trådkanalerna som genererade dessa händelser.
- GPU-kanaler.
Från början sorteras trådarna i den ordning de skapas, så huvudapptråden är först. Välj ett annat alternativ i listrutan Sortera efter för att sortera trådar enligt ett annat kriterium, till exempel Körning.
Tidslinjens färger anger tillståndet för en tråd vid en viss tidpunkt. Gröna segment körs, röda segment blockeras för synkronisering, gula segment är preemptiva, och lila segment är engagerade i enhetens I/O.
Du kan zooma in för att visa mer information eller zooma ut för att visa ett längre tidsintervall. Välj segment och punkter i diagrammet för att få information om kategorier, starttider, fördröjningar och anropsstackens tillstånd.
Använd tidslinjen för att undersöka arbetsbalansen mellan trådar som ingår i en parallell loop eller i samtidiga uppgifter. Om en tråd tar längre tid att slutföra än de andra kan arbetet vara obalanserat. Du kan förbättra appens prestanda genom att distribuera arbetet jämnare mellan trådarna.
Om endast en tråd körs vid en viss tidpunkt kanske appen inte drar full nytta av samtidighet i systemet. Du kan använda tidslinjediagrammet för att undersöka beroenden mellan trådar och de tidsmässiga relationerna mellan blockering och blockerade trådar. Om du vill ordna om trådar väljer du en tråd och väljer sedan upp- eller nedikonen i verktygsfältet.
Du kan dölja trådar som inte fungerar eller som är helt blockerade, eftersom deras statistik är irrelevant och kan täpper till rapporterna. Dölj trådar genom att välja deras namn och sedan välja ikonerna Dölj markerade trådar eller Dölj alla utom markerade trådar i verktygsfältet. Om du vill identifiera trådar som ska döljas väljer du länken Sammanfattning per tråd längst ned till vänster. Du kan dölja de trådar som inte har någon aktivitet i diagrammet Sammanfattning per tråd .
Information om trådkörning
Om du vill få mer detaljerad information om ett körningssegment väljer du en punkt i ett grönt segment av tidslinjen. Concurrency Visualizer visar en svart markerare ovanför den valda punkten och visar dess anropsstack på fliken Aktuell i den nedersta panelen. Du kan välja flera punkter på exekveringssegmentet.
Anmärkning
Concurrency Visualizer kanske inte kan lösa ett val i ett körningssegment om varaktigheten för segmentet är mindre än en millisekund.
Om du vill hämta en körningsprofil för alla oisynliga trådar i det valda tidsintervallet väljer du Körning i legenden längst ned till vänster.
Information om trådblockering
Om du vill få information om en viss region i en tråd hovra över den regionen på tidslinjen för att visa en knappbeskrivning. Knappbeskrivningen innehåller information som kategori, starttid och fördröjning. Välj regionen för att visa anropsstacken vid den tidpunkten på fliken Aktuell i det nedre fönstret. Fönstret visar även kategori, fördröjning, blockering av API om det finns en och avblockeringstråd om det finns en. Genom att undersöka anropsstacken kan du fastställa de underliggande orsakerna till trådblockeringshändelser.
En körningssökväg kan ha flera blockerande händelser. Om du vill undersöka dessa genom att blockera kategorin och hitta problemområden snabbare väljer du en blockeringskategori i förklaringen till vänster.
Beroenden mellan trådar
Concurrency Visualizer visar beroenden mellan trådar, så att du kan avgöra vad en blockerad tråd försökte göra och vilken annan tråd som gjorde att den kunde köras.
Om du vill ta reda på vilken tråd som avblockerade en annan tråd väljer du blockeringssegmentet på tidslinjen. Om Concurrency Visualizer kan fastställa avblockeringstråden, ritar den en linje mellan avblockeringstråden och exekveringssegmentet som följer blockeringssegmentet. Välj fliken Avblockera stack i den nedre rutan för att se relevant anropsstack.
Profilrapporter
Nedanför tidslinjediagrammet finns ett fönster med rapportflikarna Profilrapport, Aktuell och Avblockera stack . Rapporterna uppdateras automatiskt när du ändrar val av tidslinje och trådar. För stora spårningar kan rapportfönstret vara tillfälligt otillgängligt medan uppdateringar beräknas.
Fliken Profilrapport
Profilrapporten har två filter:
- Om du vill filtrera bort samtalsträdsposter där lite tid spenderades skriver du ett filtervärde mellan 0 och 99 procent i fältet Brusreducering . Standardvärdet är 2 procent.
- Om du bara vill visa anropsträd för koden markerar du kryssrutan Bara min kod . Om du vill visa alla anropsträd avmarkerar du kryssrutan.
Fliken Profilrapport visar rapporter för kategorierna och länkarna i förklaringen. Om du vill visa en rapport väljer du en av posterna till vänster:
Körning Den Körningsrapporten visar uppdelningen av den tid som programmet tillbringade i körning.
Om du vill hitta den kodrad där körningstiden tillbringas expanderar du anropsträdet och väljer Visa källa eller Visa samtalsplatser på snabbmenyn för posten i anropsträdet. Visa källa letar upp den körda kodraden. Visa anropsställen letar upp kodraden som anropade den exekverade raden. Om det bara finns en anropswebbplatsrad markeras dess kod. Om det finns flera samtalswebbplatser väljer du den du vill använda i dialogrutan och väljer sedan Gå till källa. Det är ofta mest användbart att hitta det anropsställe som har flest instanser, tar mest tid eller båda. Mer information finns i Körningsprofilrapport.
SynkroniseringSynkroniseringsrapporten visar de anrop som ansvarar för synkroniseringsblock, tillsammans med de totala blockeringstiderna för varje anropsstack. Mer information finns i Synkroniseringstid.
I/OI/O-rapporten visar de anrop som ansvarar för I/O-block, tillsammans med de totala blockeringstiderna för varje anropsstacken. För mer information, se I/O-tid (trådvyn).
Sova Rapporten Viloläge visar de anrop som ansvarar för vilolägesblock, tillsammans med de totala blockeringstiderna för varje anropsstack. Mer information finns i Vilotid.
Minneshantering Rapporten Minneshantering visar anropen där minneshanteringsblock inträffade, tillsammans med de totala blockeringstiderna för varje anropsstack. Använd den här informationen för att identifiera områden som har problem med överdriven växling eller skräpinsamling. Mer information finns i Minneshanteringstid.
PreemptionPreemption-rapporten visar var processer i systemet avbröt den aktuella processen och enskilda trådar ersatte de trådarna i den aktuella processen. Du kan använda den här informationen för att identifiera de processer och trådar som är mest ansvariga för förebyggande. Mer information finns i Preemption time.
Bearbetning av användargränssnitt Rapporten UI-bearbetning visar de anrop som ansvarar för UI-bearbetningsblock, tillsammans med de totala blockeringstiderna för varje anropsstack. Mer information finns i bearbetningstiden för användargränssnittet.
Sammanfattning per tråd Välj Sammanfattning per tråd för att visa ett diagram som visar tillståndet för trådar för det valda tidsintervallet. De färgkodade kolumnerna visar den totala tid som varje tråd har spenderat i körnings-, blockerat, I/O- och andra tillstånd. Trådarna är märkta längst ned. När du justerar zoomnivån i tidslinjediagrammet uppdateras diagrammet automatiskt.
På vissa zoomnivåer kanske vissa trådar inte visas i diagrammet. När detta händer visas ellipser (...) till höger. Om den tråd du vill använda inte visas kan du dölja andra trådar. Mer information finns i Sammanfattningsrapport per tråd.
Diskåtgärder Välj Diskåtgärder för att visa processer och trådar som ingår i disk-I/O för den aktuella processen, filer som de berörde (till exempel DLL:er som de läste in), hur många byte de läste och annan information. Du kan använda den här rapporten för att utvärdera den tid som ägnas åt att komma åt filer under körningen, särskilt när processen verkar vara I/O-bunden. Mer information finns i Diskåtgärdsrapport.
Aktuell flik
På den här fliken visas anropsstacken för en vald punkt i ett trådsegment i tidslinjediagrammet. Anropsstackarna trimmas för att endast visa aktivitet som är relaterad till din app.
Flik för att låsa upp stacken
På den här fliken visas vilken tråd som avblockerade den markerade tråden och den avblockerande anropsstacken.
Kanaler (trådvy)
Concurrency Visualizer visar fyra typer av kanaler: trådkanaler, diskkanaler, markörkanaler och GPU-kanaler.
Trådkanaler
En trådkanal visar trådtillstånd, efter färg, för bara en tråd. När du pausar kanalnamnet visas startfunktionen för den angivna tråden. Concurrency Visualizer identifierar flera typer av trådar. De vanligaste typerna visas i följande tabell.
| Thread | Description |
|---|---|
| Huvudtråd | Tråden som startade appen. |
| Arbetstråd | En tråd som skapades av programmets huvudtråd. |
| CLR Worker-tråd | En arbetstråd som skapades av CLR (Common Language Runtime). |
| Felsökningshjälp | En arbetstråd som skapades av Visual Studio-felsökningsprogrammet. |
| ConcRT-tråd | En tråd som skapades av Microsoft Concurrency Runtime. |
| GDI-tråd | En tråd som skapades av GDIPlus. |
| OLE/RPC-tråd | En tråd som skapades som en RPC Worker-tråd. |
| RPC-tråd | En tråd som skapades som en RPC-tråd. |
| Winsock-tråd | En tråd som skapades som en Winsock-tråd. |
| Trådpool | En tråd som skapades av CLR-trådpoolen. |
Diskkanaler
Diskkanaler motsvarar fysiska enheter i datorn. Eftersom det finns separata kanaler för läs- och skrivåtgärder för varje fysisk enhet i systemet har varje enhet två kanaler. Disknumren motsvarar kernelenhetsnamn. En diskkanal visas endast om det fanns aktivitet på disken.
Markörkanaler
Markörkanaler motsvarar händelser som genereras av appen och de bibliotek som används. Till exempel genererar det parallella aktivitetsbiblioteket, biblioteket för parallella mönster och C++ AMP händelser som visas som markörer. Varje markörkanal är associerad med ett tråd-ID som visas bredvid beskrivningen av kanalen. ID:t identifierar den tråd som genererade händelsen. Beskrivningen av kanalen innehåller namnet på ETW-providern (Event Tracing for Windows) som genererade händelserna. Om kanalen visar händelser från Concurrency Visualizer SDK visas även serienamnet.
GPU-kanaler
GPU-kanaler visar information om DirectX 11-aktivitet i systemet. Varje DirectX-motor som är associerad med grafikkortet har en separat kanal. De enskilda segmenten representerar den tid som ägnas åt att bearbeta ett DMA-paket.
Kopiera markering
Om du vill kopiera hela anropsstacken från rapportfliken klickar du på Kopiera. Du kan sedan klistra in anropsstacken i alla program som stöder den åtgärden.
Aktuell flik
Genom att klicka på fliken Aktuell kan du se en anropsstack (om tillgänglig) som är närmast den aktuella markeringspunkten på tidslinjen om ett CPU-trådsegment har valts. I det här fallet representeras markeringspunkten av en svart pil, eller caret, ovanför tidslinjen. När ett blockeringssegment har valts visas inte caret eftersom det inte utfördes någon exekvering. Segmentet är dock fortfarande markerat och en anropsstack visas.
Fliken Aktuell visar också information om DirectX-aktivitetssegment, markörer och I/O-åtkomst. För DirectX-aktivitetssegment visas information om hur DMA-paket bearbetas av maskinvarukön. För markörer visas information om beskrivningen och markörtypen. För I/O-åtkomst visas information om filen och antalet lästa eller skrivna byte.
Tomt tidslinjesegment
I Concurrency Visualizer beror orsaken till att en del av tidslinjen är tom (har en vit bakgrund) på vilken typ av kanal.
För en CPU-trådkanal innebär det att tråden inte fanns under den här delen av tidslinjen. Om du är intresserad av tråden kan du hitta dess exekveringssektion genom att använda zoomkontrollen eller scrolla horisontellt.
För en I/O-kanal innebär det att ingen diskåtkomst inträffade för målprocessens räkning vid den tidpunkten.
För en DirectX-kanal innebär det att inget GPU-arbete utfördes för målprocessens räkning under den här delen av tidslinjen.
För en markörkanal innebär det att inga markörer genererades.
Knappen Exportera (Concurrency Visualizer)
Med knappen Exportera kan du exportera anropsstacken som en . csv-fil för dina egna poster eller för användning med ett annat verktyg, till exempel Microsoft Excel.
Bara min kod (trådvyn)
Om du väljer det här alternativet filtrerar du anropsstacken så att endast koden visas plus en nivå med anropade funktioner.
Genom att aktivera det här alternativet kan du avsevärt minska komplexiteten i anropsstacken och kanske göra det enklare att diagnostisera ett visst problem.
I vissa fall kan du filtrera bort blockeringsanropet genom att välja det här alternativet. Om du behöver fullständig information om anropsstacken för att göra den här bedömningen avmarkerar du det här alternativet för att exponera hela anropsstacken.
Hantera kanaler
I Trådvy i Concurrency Visualizer kan du ordna kanalerna för din process så att du kan undersöka vissa mönster. Du kan sortera kanaler, flytta dem uppåt och nedåt och dölja eller visa dem.
Sortera efter
Du kan använda kontrollen Sortera efter för att sortera trådarna efter olika villkor, baserat på den aktuella zoomnivån. Detta är särskilt användbart när du letar efter ett visst mönster. Du kan sortera efter följande kriterier:
| Kriterier | Definition |
|---|---|
| Starttid | Sorterar trådar efter deras starttider. Det här är standardsorteringsordningen. |
| Avslutningstid | Sorterar trådar efter deras sluttider. |
| Execution | Sorterar trådar efter den procentuella andelen av tiden som går åt till körning. |
| Synchronization | Sorterar trådar efter procentandelen tid som ägnas åt synkronisering. |
| I/O | Sorterar trådar efter procentandelen tid som spenderas i I/O (läsning och skrivning av data). |
| Sova | Sorterar trådar efter procentandelen tid som spenderas i viloläge. |
| Paging | Sorterar trådar efter den procentuella andelen av tiden som ägnas åt sökväxling. |
| Preemption | Sorterar trådar efter procentandelen tid som spenderas i preemption. |
| Bearbetning av användargränssnitt | Sorterar trådar efter procentandelen tid som ägnas åt bearbetning av användargränssnitt. |
Flytta den markerade kanalen uppåt eller nedåt
Du kan använda dessa kontroller för att flytta en kanal uppåt eller nedåt i listan. Du kan till exempel placera relaterade kanaler bredvid varandra för att hjälpa dig att undersöka ett visst mönster eller en korstrådsrelation.
Flytta markerad kanal till överst eller nederkant
Du kan flytta markerade kanaler längst upp eller ned i listan så att du kan undersöka ett visst mönster eller flytta vissa kanaler ur vägen när du undersöker andra.
Dölj markerade kanaler
Välj den här kontrollen när du vill dölja kanaler. Om en tråd till exempel är 100 procent synkroniserad under hela den hanterade processen kan du dölja den när du analyserar andra trådar.
Anmärkning
Om du döljer en tråd tas den också bort från beräkningstiden, vilket visas i den aktiva legend och i profilrapporterna.
Visa alla kanaler
Den här kontrollen är aktiv när en eller flera kanaler är dolda. Om du väljer det visas alla dolda element och returneras till tidsberäkningarna.
Flytta markörer överst
Om en spårning innehåller markörhändelser kan du använda det här kommandot för att flytta markörkanalerna överst på tidslinjen. Deras relativa ordning bevaras.
Gruppera markörer efter tråd
Om en spårning innehåller markörhändelser kan du använda det här kommandot för att gruppera markörkanaler under tråden som genererade markörhändelserna. Diskkanalerna flyttas överst i kanallistan och GPU-kanaler flyttas längst ned.
Mätläge på/av
Med hjälp av det här verktyget kan du exakt mäta en tidsperiod i tidslinjen. Om du vill aktivera måttläget klickar du på måttknappen (som har en linjalikon) och drar sedan i tidslinjen. När du drar ser du att området under pekaren är markerat i gult och att den tid som mäts visas i verktygsfältet till höger om knappen. Det här värdet beräknas dynamiskt när du drar så att du omedelbart kan se hur lång tid en viss händelse tar. När du släpper musknappen förblir tidsvärdet synligt.
Du kan upprepa mätningsprocessen, men endast den senaste mätningen visas. Klicka på måttknappen igen för att inaktivera måttläget.
Brusreducering i procent
Som standard är värdet för inställningen Brusreduceringsprocent 2. Endast poster som har en procentandel inkluderande tid som är större än eller lika med den här inställningen visas i anropsträdet. Genom att ändra inställningen kan du styra antalet poster som visas i anropsträdet. Om du till exempel ändrar värdet till 10 visas endast anropsträdposter som har en inkluderande tid som är större än eller lika med 10%. Genom att öka värdet för inställningen kan du fokusera på poster som har större inverkan på processens prestanda.
Rapport baserat på synligt tidsintervall
Vyn Profil visar rapporter som baseras på det aktuella synliga tidsintervallet och kanalerna. Om du vill se information om olika delmängder av data klickar du på objekt i förklaringen.
Du hittar mer information om data i rapporterna för Trådvy.
Trådkompatibel kontakt
När du klickar på ett blockeringssegment för att se en anropsstack och dess avblockeringsstack kommer trådberedskapsanslutningen också att visas. Om avblockeringshändelsen inträffade på en annan tråd i den aktuella processen identifierar den trådklara anslutningsappen visuellt tråd- och körningssegmentet som gjorde det möjligt för den blockerade tråden att återuppta körningen.
Tidslinjemarkör
När du väljer en punkt på tidslinjen för ett körningstrådssegment visas en tidslinjes caret ovanför den. Anropsstacken som visas på den aktuella stackfliken är den som är närmast i tiden där du klickade på segmentet. Caret används för att associera anropsstacken, som visas under fliken Aktuell, med det ögonblick då den samplades. Caret visar den exakta platsen för anropsstacken, som är den närmaste anropsstacken till den plats som användaren valde.
Avblockera stack
Om det markerade trådelementet representerar ett blockerat segment som senare började köras efter att det avblockerats av en annan tråd i den aktuella processen visas anropsstacken för tråden som utförde avblockeringen på den här fliken.
Synlig tidslinjeprofil
Profilen Synlig tidslinje för vyn Trådblockering innehåller statistisk information och länkar till rapporter. När du zoomar in, zoomar ut, rullar vågrätt, döljer kanaler eller visar kanaler ändras siffrorna i den aktiva förklaringen för att återspegla vad som för närvarande visas. Om du vill visa en rapport om ett objekt i förklaringen klickar du på objektet.
Zoomkontroll (trådvy)
Zoomkontrollen är ett skjutreglage som hjälper dig att zooma in och ut på tidslinjen så att du kan fokusera på områden av särskilt intresse. Eftersom den här kontrollen zoomar in i mitten av tidslinjevyn, centrerar du intresseområdet innan du zoomar in.
Zooma in genom att dra i tidslinjevyn
Om du zoomar in genom att dra i tidslinjevyn skapas ett område som är markerat i gult. När du släpper musknappen zoomar tidslinjevyn in på det valda intervallet.
Zooma in och ut med hjälp av mushjulet
Klicka på valfri punkt på tidslinjen (för att se till att den har musfokus) och tryck sedan på Ctrl och flytta mushjulet (framåt zoomar in, bakåt zoomar ut).