Analizowanie wydajności przy użyciu profilowania procesora CPU w profilerze wydajności (C#, Visual Basic, C++, F#)
Dobrym sposobem na rozpoczęcie badania problemów z wydajnością w aplikacji jest zrozumienie wykorzystania procesora CPU przy użyciu profilera procesora CPU. Narzędzie wydajności użycia procesora CPU programu Visual Studio pokazuje aktywny czas obliczeniowy procesora CPU i procent spędzony na wykonywaniu kodu w języku C++, C#/Visual Basic.
Narzędzie Użycie procesora CPU może pomóc:
Diagnozowanie spowolnienia lub zawieszania się procesu w bazie kodu zespołu. Narzędzie może pomóc zdiagnozować problem z kodem produkcyjnym zespołu. Zapewnia ona automatyczne szczegółowe informacje i różne widoki danych, dzięki czemu można analizować i diagnozować problemy z wydajnością.
Zidentyfikuj problemy z wydajnością w scenariuszach DevOps, na przykład narzędzie może pomóc, gdy klient zgłasza, że niektóre żądania lub zamówienia nie przechodzą do witryny internetowej sklepu detalicznego w okresie szczytu. Często problemy występują w środowisku produkcyjnym i trudno jest debugować w tej chwili, ale to narzędzie może pomóc w przechwyceniu wystarczającej ilości informacji i dowodów na problem. Po zebraniu pliku śledzenia analiza może szybko pomóc zrozumieć potencjalne przyczyny i przekazać sugestie w kontekście kodu, aby można było wykonać kolejne kroki w celu rozwiązania problemu.
Sprawdź wysokie wykorzystanie procesora CPU, jeśli problem z opóźnieniem nie znajduje się w żądaniu interfejsu API, możesz sprawdzić wysokie wykorzystanie procesora CPU i inne powiązane problemy z narzędziem Użycie procesora CPU. Narzędzie Użycie procesora CPU może pomóc w zidentyfikowaniu wąskich gardeł, dzięki czemu można zawęzić miejsce optymalizacji.
Narzędzie Użycie procesora CPU jest przydatne zarówno w przypadku lokalnych sesji śledzenia, jak i środowiska produkcyjnego. Narzędzie Użycie procesora CPU można uruchomić za pomocą skrótu klawiaturowego Alt+F2, a następnie wybrać pozycję Użycie procesora CPU lub otwierając już zebrane dane śledzenia za pomocą narzędzia, takiego jak dotnet-trace lub dotnet-monitor. (W przypadku kodu produkcyjnego platformy .NET jest to najprawdopodobniej sposób zbierania śladów).
Narzędzie Użycie procesora CPU można uruchomić w otwartym projekcie programu Visual Studio, w zainstalowanej aplikacji ze sklepu Microsoft Store lub dołączyć do uruchomionej aplikacji lub procesu. Narzędzie Użycie procesora CPU można uruchomić z debugowaniem lub bez debugowania. Aby uzyskać więcej informacji, zobacz Uruchamianie narzędzi profilowania z debugerem lub bez tego debugera.
Poniższe instrukcje pokazują, jak używać narzędzia Użycie procesora CPU bez debugera przy użyciu profilera wydajności programu Visual Studio. W przykładach użyto kompilacji Wydania na komputerze lokalnym. Kompilacje wersji zapewniają najlepszy widok rzeczywistej wydajności aplikacji. Aby zapoznać się z samouczkiem pokazującym, jak poprawić wydajność przy użyciu narzędzia Użycie procesora CPU, zobacz Analiza przypadku: Przewodnik dla początkujących dotyczący optymalizowania kodu.
Zazwyczaj maszyna lokalna najlepiej replikuje zainstalowane wykonanie aplikacji. Aby zebrać dane z urządzenia zdalnego, uruchom aplikację bezpośrednio na urządzeniu, a nie za pośrednictwem połączenia pulpitu zdalnego.
Zbieranie danych użycia procesora CPU
W projekcie programu Visual Studio ustaw konfigurację rozwiązania na Release (Wydanie ) i wybierz pozycję Local Windows Debugger (lub Local Machine) jako element docelowy wdrożenia.
Wybierz pozycję Debugowanie>profilera wydajności.
W obszarze Dostępne narzędzia wybierz pozycję Użycie procesora CPU, a następnie wybierz pozycję Uruchom.
Jeśli włączysz opcję Rozpocznij od kolekcji wstrzymanej przed uruchomieniem profilera, dane nie będą zbierane do momentu wybrania przycisku Rekord w widoku sesji diagnostycznej.
Uwaga
Aby uzyskać więcej informacji na temat zwiększenia wydajności narzędzia, zobacz Optymalizowanie ustawień profilera.
Po uruchomieniu aplikacji rozpoczyna się sesja diagnostyczna i wyświetla dane użycia procesora CPU. Po zakończeniu zbierania danych wybierz pozycję Zatrzymaj zbieranie.
Narzędzie Użycie procesora CPU analizuje dane i wyświetla raport. Jeśli masz problemy ze zbieraniem lub wyświetlaniem danych, zobacz Rozwiązywanie problemów z błędami profilowania i rozwiązywanie problemów.
Użyj listy rozwijanej Filtr , aby wybrać lub usunąć zaznaczenie wątków do wyświetlenia, a następnie użyj pola Wyszukiwania , aby wyszukać określony wątek lub węzeł.
Kolumny danych użycia procesora CPU
Nazwa/nazwisko | opis |
---|---|
Łączna liczba procesorów CPU [jednostka, %] | Liczba milisekund czasu obliczeniowego procesora i procent użycia procesora CPU przez wywołania funkcji oraz funkcji wywoływanych przez funkcję w wybranym zakresie czasu. Różni się to od wykresu osi czasu wykorzystania procesora CPU, który porównuje łączną aktywność procesora CPU w zakresie czasu z łączną dostępną ilością procesora CPU. |
Procesor własny [jednostka, %] | Liczba milisekund czasu obliczeniowego procesora i procent użycia procesora CPU przez wywołania funkcji w wybranym zakresie czasu, z wyłączeniem funkcji wywoływanych przez funkcję. |
Moduł | W niektórych widokach zostanie wyświetlona kolumna Moduł, która pokazuje nazwę modułu zawierającego funkcję. |
Analizowanie szczegółowych informacji o procesorze CPU
Jeśli jakiekolwiek szczegółowe informacje są wyświetlane w sekcji Najważniejsze szczegółowe informacje, użyj podanego linku, aby uzyskać więcej informacji na temat zidentyfikowanego problemu. Ponadto, jeśli używasz copilot, przycisk Zapytaj Copilot otworzy okno czatu Copilot , a Copilot udostępni sugestie na podstawie kodu i zidentyfikowanych problemów.
Aby uzyskać więcej informacji, zobacz Szczegółowe informacje o procesorze CPU.
Analizowanie wykorzystania procesora CPU
Aby przeanalizować raport Użycie procesora CPU, kliknij pozycję Otwórz szczegóły lub kliknij jedną z najważniejszych funkcji, aby otworzyć widok funkcji .
Raport zawiera różne widoki danych diagnostycznych:
- Obiekt wywołujący/wywoływany
- Drzewo wywołań
- Moduły
- Funkcje
- Wykres płomienia
Aby przeanalizować raport, kliknij pozycję Utwórz szczegółowy raport.
Raport zawiera różne widoki danych diagnostycznych:
- Obiekt wywołujący/wywoływany
- Drzewo wywołań
We wszystkich widokach z wyjątkiem obiektu wywołującego/wywoływanego raport diagnostyczny jest sortowany według całkowitego procesora CPU, od najwyższego do najniższego. Zmień kolejność sortowania lub kolumnę sortowania, wybierając nagłówki kolumn. Możesz kliknąć dwukrotnie funkcję, którą cię interesuje, i zobaczysz źródło funkcji, a także wyróżnienie, które pokazuje, gdzie jest spędzany czas w tej funkcji. W tabeli przedstawiono kolumny z danymi, takimi jak czas spędzony w funkcji, w tym nazywane funkcjami (łączny procesor CPU), a druga kolumna przedstawiająca czas spędzony w funkcji, z wyłączeniem nazywanych funkcjami (Procesor własny).
Te dane mogą pomóc w ocenie, czy sama funkcja jest wąskim gardłem wydajności. Określ ilość danych wyświetlanych przez metodę, aby sprawdzić, czy biblioteki kodu lub środowiska uruchomieniowego innej firmy są przyczyną spowolnienia punktów końcowych lub dużego zużycia zasobów.
Aby uzyskać więcej informacji na temat używania grafu Płomienia, zobacz Identyfikowanie ścieżek gorących za pomocą grafu płomieni.
Drzewo wywołań użycia procesora CPU
Aby wyświetlić drzewo wywołań, wybierz węzeł nadrzędny w raporcie. Domyślnie strona Użycie procesora CPU zostanie otwarta w widoku Wywołujący/Wywoływany. Na liście rozwijanej Bieżący widok wybierz pozycję Drzewo wywołań.
Możesz kliknąć przyciski Rozwiń ścieżkę gorącą i Pokaż ścieżkę gorącą, aby wyświetlić wywołania funkcji, które używają najwyższego procentu procesora CPU w widoku drzewa wywołań.
Struktura drzewa wywołań
Obraz | opis |
---|---|
Węzeł najwyższego poziomu w drzewie wywołań użycia procesora CPU reprezentujący aplikację. | |
W większości aplikacji, gdy opcja Pokaż kod zewnętrzny jest wyłączona, węzeł drugiego poziomu jest węzłem [Kod zewnętrzny]. Węzeł zawiera kod systemu i struktury, który uruchamia i zatrzymuje aplikację, rysuje interfejs użytkownika, kontroluje planowanie wątków i udostępnia inne usługi niskiego poziomu aplikacji. | |
Elementy podrzędne węzła drugiego poziomu to metody kodu użytkownika i procedury asynchroniczne, które są wywoływane lub tworzone przez kod systemu i struktury drugiego poziomu. | |
Węzły podrzędne metody mają dane tylko dla wywołań metody nadrzędnej. Gdy opcja Pokaż kod zewnętrzny jest wyłączona, metody aplikacji mogą również zawierać węzeł [Kod zewnętrzny]. |
Kod zewnętrzny
Funkcje systemu i struktury, które są wykonywane przez kod, są nazywane kodem zewnętrznym. Funkcje kodu zewnętrznego uruchamiają i zatrzymują aplikację, rysują interfejs użytkownika, kontrolują wątki i udostępniają aplikacjom inne usługi niskiego poziomu. W większości przypadków nie interesuje Cię kod zewnętrzny, dlatego drzewo wywołań użycia procesora CPU zbiera funkcje zewnętrzne metody użytkownika w jednym węźle [Wywołanie zewnętrzne].
Aby wyświetlić ścieżki wywołania kodu zewnętrznego, na głównej stronie podsumowania raportu (okienko po prawej stronie), usuń zaznaczenie pozycji Pokaż mój kod z listy rozwijanej Ustawienia , a następnie wybierz pozycję Zastosuj. (Lista rozwijana Ustawienia jest dostępna na głównej stronie podsumowania raportu, a nie na widokach szczegółowych).
Funkcje systemu i struktury, które są wykonywane przez kod, są nazywane kodem zewnętrznym. Funkcje kodu zewnętrznego uruchamiają i zatrzymują aplikację, rysują interfejs użytkownika, kontrolują wątki i udostępniają aplikacjom inne usługi niskiego poziomu. W większości przypadków nie interesuje Cię kod zewnętrzny, więc drzewo wywołań użycia procesora CPU zbiera funkcje zewnętrzne metody użytkownika w jednym węźle [Kod zewnętrzny].
Aby wyświetlić ścieżki wywołania kodu zewnętrznego, na głównej stronie raportu diagnostycznego (okienko po prawej stronie) wybierz pozycję Pokaż kod zewnętrzny z listy rozwijanej Filtr , a następnie wybierz pozycję Zastosuj. Widok Drzewo wywołań strony Użycie procesora CPU rozwija wywołania kodu zewnętrznego. (Lista rozwijana filtru jest dostępna na stronie głównej diagnostyki, a nie na szczegółowych widokach).
Po wyłączeniu opcji Pokaż tylko mój kod widok Drzewo wywołań strony Użycie procesora CPU rozszerza wywołania kodu zewnętrznego.
Wiele łańcuchów wywołań kodu zewnętrznego jest głęboko zagnieżdżonych, więc szerokość łańcucha może przekraczać szerokość wyświetlaną kolumny Nazwa funkcji. Nazwy funkcji zostaną wyświetlone, jak pokazano na poniższej ilustracji.
Wiele łańcuchów wywołań kodu zewnętrznego jest głęboko zagnieżdżonych, więc szerokość łańcucha może przekraczać szerokość wyświetlaną kolumny Nazwa funkcji. Nazwy funkcji są wyświetlane jako ....
Aby znaleźć nazwę funkcji, której szukasz, użyj pola wyszukiwania. Umieść kursor na wybranym wierszu lub użyj poziomego paska przewijania, aby wyświetlić dane.
Funkcje asynchroniczne w drzewie wywołań użycia procesora CPU
Gdy kompilator napotka metodę asynchroniczną, tworzy ukrytą klasę do kontrolowania wykonywania metody. Koncepcyjnie klasa jest maszyną stanu. Klasa ma funkcje generowane przez kompilator, które asynchronicznie nazywają oryginalne metody, a wywołania zwrotne, harmonogram i iteratory potrzebne do ich uruchomienia. Gdy metoda nadrzędna wywołuje oryginalną metodę, kompilator usuwa metodę z kontekstu wykonywania elementu nadrzędnego i uruchamia ukryte metody klasy w kontekście kodu systemu i struktury kontrolującego wykonywanie aplikacji. Metody asynchroniczne są często, ale nie zawsze wykonywane w co najmniej jednym wątku. Ten kod jest wyświetlany w drzewie wywołań użycia procesora CPU jako elementy podrzędne węzła [Kod zewnętrzny] bezpośrednio poniżej górnego węzła drzewa.
W poniższym przykładzie pierwsze dwa węzły w obszarze [Kod zewnętrzny] to metody generowane przez kompilator klasy maszyny stanu. Trzeci węzeł to wywołanie oryginalnej metody.
Rozwiń wygenerowane metody, aby pokazać, co się dzieje:
MainPage::GetMaxNumberAsyncButton_Click
po prostu zarządza listą wartości zadań, oblicza maksymalną liczbę wyników i wyświetla dane wyjściowe.MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext
Pokazuje działanie wymagane do zaplanowania i uruchomienia 48 zadań, które opakowują wywołanie doGetNumberAsync
.MainPage::<GetNumberAsync>b__b
wyświetla działanie zadań, które wywołająGetNumber
element .
Zbieranie liczby wywołań (.NET)
Jeśli chcesz wyświetlić liczby wywołań w widoku funkcje, możesz włączyć to ustawienie przed uruchomieniem profilera. To ustawienie jest obsługiwane w przypadku typów projektów .NET i wymaga uruchomienia procesu w profilerze. Scenariusz dołączania nie jest obsługiwany.
Wybierz ikonę Ustawienia użycia procesora CPU w profilerze wydajności.
Włącz opcję Zbieraj liczby wywołań (tylko platforma.NET).
Zbieranie danych użycia procesora CPU.
Otwórz widok Funkcje, a następnie upewnij się, że kolumna Liczba wywołań jest widoczna.
Jeśli kolumna nie jest widoczna, kliknij prawym przyciskiem myszy nagłówek kolumny, aby wybrać widoczne kolumny.