Najpierw przyjrzyj się narzędziom profilowania (C#, Visual Basic, C++, F#)
Narzędzia do pomiaru wydajności aplikacji są niezbędne dla deweloperów, którzy chcą zoptymalizować swój kod i zwiększyć wydajność aplikacji. Program Visual Studio oferuje szereg narzędzi profilowania i diagnostyki, które mogą pomóc w diagnozowaniu użycia pamięci i procesora CPU oraz innych problemów na poziomie aplikacji. Za pomocą tych narzędzi można gromadzić dane wydajności podczas uruchamiania aplikacji. Profiler może pomóc w szybkim podejmowaniu świadomych decyzji, udostępniając wizualny obraz czasu wykonywania i użycie procesora CPU dla aplikacji. W tym artykule przedstawiono najpopularniejsze narzędzia profilowania.
Aby uzyskać pomoc dotyczącą wybierania odpowiedniego narzędzia lub wyświetlić obsługę narzędzi profilowania dla różnych typów aplikacji, zobacz Którego narzędzia należy użyć? Aby zapoznać się z samouczkiem przedstawiającym ogólne podejście do optymalizacji kodu przy użyciu narzędzi profilowania, zobacz Analiza przypadku: Przewodnik dla początkujących dotyczący optymalizowania kodu.
Aby uzyskać najlepsze doświadczenie w tej dokumentacji, wybierz preferowany język programowania lub środowisko uruchomieniowe z listy w górnej części artykułu.
Mierzenie wydajności w kompilacjach wersji
Narzędzia w profilerze wydajności mają na celu zapewnienie analizy kompilacji Release. W narzędziu do profilowania wydajności można zbierać informacje diagnostyczne podczas działania aplikacji, a następnie przeanalizować zebrane informacje po zakończeniu działania aplikacji (analiza po zakończeniu działania).
Otwórz Profilera Wydajności, wybierając Debug>Profiler Wydajności (lub Alt + F2).
profilera wydajności
Aby uzyskać więcej informacji na temat korzystania z narzędzi Użycia CPU lub Użycia pamięci w narzędziach profilerów wydajności w porównaniu do narzędzi zintegrowanych z debugerem, zapoznaj się z Uruchamianie narzędzi profilowania w kompilacjach wydania lub debugowania.
Narzędzia dostępne w profilerze wydajności obejmują:
Aby wyświetlić obsługę narzędzi profilowania dla różnych typów aplikacji, zobacz Którego narzędzia należy użyć?.
W niektórych scenariuszach okno umożliwia wybranie wielu narzędzi profilowania. Narzędzia, takie jak użycie procesora CPU, mogą dostarczać uzupełniające dane, których można użyć do ułatwienia analizy. Można również użyć profilera wiersza polecenia , aby umożliwić scenariusze obejmujące wiele narzędzi profilowania.
Mierzenie wydajności podczas debugowania
Narzędzia profilowania, do których można uzyskać dostęp podczas sesji debugowania, są dostępne w oknie Narzędzia diagnostyczne. Okno Narzędzia diagnostyczne zostanie wyświetlone automatycznie, chyba że je wyłączyłeś. Aby wyświetlić okno, kliknij przycisk Debugowanie /Windows / Pokaż narzędzia diagnostyczne (lub naciśnij Ctrl + Alt + F2). Po otwarciu okna możesz wybrać narzędzia, dla których chcesz zbierać dane.
Podczas debugowania można użyć okna narzędzi diagnostycznych do analizowania użycia procesora CPU, pamięci, liczników platformy .NET i można wyświetlić zdarzenia, które pokazują informacje dotyczące wydajności.
Podczas debugowania można użyć okna narzędzi diagnostycznych do analizowania użycia procesora CPU i pamięci oraz wyświetlić zdarzenia, które pokazują informacje dotyczące wydajności.
Widok podsumowania narzędzi diagnostycznych
Widok podsumowania narzędzi diagnostycznych
Okno Diagnostic Tools to typowy sposób profilowania aplikacji, ale w przypadku kompilacji produkcyjnych można również przeprowadzić analizę pośmiertną aplikacji. Aby uzyskać więcej informacji na temat różnych podejść, zobacz Uruchamianie narzędzi profilowania w kompilacjach wydania lub debugowania. Aby wyświetlić obsługę narzędzi profilowania dla różnych typów aplikacji, zobacz Którego narzędzia należy użyć?.
Narzędzia dostępne w oknie Narzędzia diagnostyczne lub podczas sesji debugowania obejmują:
Napiwek
Użyj ponownego uruchamiania, aby pominąć ekran startowy i automatycznie uruchomić z poprzednimi ustawieniami, naciskając Alt+F2 lub klikając Debugger > Analizator wydajności.
Notatka
System Windows 8 lub nowszy jest wymagany do uruchamiania narzędzi profilowania za pomocą debugera (narzędzia diagnostyczne okna).
Analizowanie użycia procesora
Narzędzie Użycie CPU jest dobrym miejscem do rozpoczęcia analizy wydajności aplikacji. Będzie on zawierać więcej informacji o zasobach procesora CPU używanych przez aplikację. Możesz użyć narzędzia zintegrowanego z debugerem do analizy użycia CPU lub narzędzia do analizy użycia CPU w trybie pośmiertnym .
W przypadku korzystania z narzędzia Monitorowanie wykorzystania CPU zintegrowanego z debugerem, otwórz okno narzędzia diagnostyczne (jeśli jest zamknięte, wybierz Debugowanie / Windows / Pokaż narzędzia diagnostyczne). Podczas debugowania otwórz widok podsumowania, a następnie wybierz Rejestrowanie profilu CPU.
Jednym ze sposobów użycia narzędzia jest ustawienie dwóch punktów przerwania w kodzie, jeden na początku i jeden na końcu funkcji lub regionu kodu, który chcesz przeanalizować. Sprawdź dane profilowania, kiedy jesteś wstrzymany przy drugim punkcie przerwania.
Widok użycie procesora przedstawia listę funkcji uporządkowanych według czasu działania, z najdłużej działającą funkcją znajdującą się na górze w obszarze Top Functions. W sekcji Najbardziej Obciążone Ścieżki przedstawiono stos wywołań dla funkcji zużywających najwięcej CPU. Te listy mogą ci pomóc wskazać funkcje, w których występują wąskie gardła wydajności.
Narzędzia diagnostyczne Widok użycia procesora CPU
Widok Użycie CPU przedstawia listę funkcji uporządkowanych według najdłuższego działania, z najdłużej działającą funkcją u góry. Może to pomóc w zidentyfikowaniu funkcji, w których występują wąskie gardła wydajności.
Widok użycia CPU narzędzi diagnostycznych
Kliknij funkcję, którą cię interesuje, i zobaczysz bardziej szczegółowy widoku drzewa wywołań z wyróżnioną wybraną funkcją. W tabeli przedstawiono kolumny z danymi, takimi jak czas spędzony w funkcji, w tym wywołania funkcji (Łączny czas CPU), a druga kolumna przedstawiająca czas spędzony w funkcji, z wyłączeniem wywołań funkcji (Self CPU). Te dane mogą pomóc w ocenie, czy funkcja sama w sobie jest wąskim gardłem wydajności.
Napiwek
Profiler programu Visual Studio obsługuje zbieranie i wyświetlanie śladów. Profiler może również wyświetlać ślady zebrane wcześniej przez inne narzędzia, takie jak dotnet-trace. Funkcja Dotnet-trace generuje wyniki próbkowania, a nie instrumentowane ślady. Aby uzyskać więcej informacji, zobacz dotnet-trace.
narzędzia diagnostyczne
Kliknij funkcję, którą cię interesuje, i zobaczysz bardziej szczegółowy widok "motyl" z wybraną funkcją w środku okna, funkcją wywołującą po lewej stronie i wywoływanymi funkcjami po prawej stronie. Sekcja Treść funkcji przedstawia łączną ilość czasu (i procent czasu) spędzonego w treści funkcji z wyłączeniem czasu poświęcanego na wywoływanie i wywoływanie funkcji. Te dane mogą pomóc ci ocenić, czy funkcja sama w sobie stanowi wąskie gardło wydajności.
Narzędzia diagnostyczne
Analizowanie użycia pamięci
Okno Diagnostic Tools umożliwia również ocenę użycia pamięci w aplikacji przy użyciu narzędzia Memory Usage. Można na przykład przyjrzeć się liczbie i rozmiarowi obiektów na stercie. Możesz użyć narzędzia do analizy użycia pamięci zintegrowanego z debugerem lub narzędzia do pośmiertnej analizy użycia pamięci w profilerze wydajności.
Deweloperzy .NET mogą wybrać narzędzie Alokacji Obiektów .NET lub narzędzie Użycia Pamięci.
- Narzędzie alokacji obiektów platformy .NET pomaga identyfikować wzorce alokacji i anomalie w kodzie platformy .NET, a także rozpoznawać typowe problemy związane ze zbieraniem śmieci. To narzędzie działa tylko jako narzędzie do analizy retrospektywnej. To narzędzie można uruchomić na maszynach lokalnych lub zdalnych.
- Narzędzie Użycie pamięci jest przydatne podczas identyfikowania przecieków pamięci, które zazwyczaj nie występują w aplikacjach .NET. Jeśli musisz używać funkcji debugera podczas sprawdzania pamięci, takich jak krokowe wykonywanie kodu, zaleca się narzędzie użycia pamięci zintegrowane z debugerem.
Aby przeanalizować użycie pamięci za pomocą narzędzia Użycie pamięci, należy wykonać co najmniej jedną migawkę pamięci. Często najlepszym sposobem analizowania pamięci jest wykonanie dwóch migawek; pierwszy tuż przed podejrzeniem problemu z pamięcią, a druga migawka bezpośrednio po wystąpieniu podejrzanego problemu z pamięcią. Następnie możesz wyświetlić różnice między dwiema migawkami i dokładnie zobaczyć, co się zmieniło. Poniższa ilustracja przedstawia tworzenie zrzutu ekranu za pomocą narzędzia zintegrowanego z debugerem.
Po wybraniu jednego z odnośników strzałek, wyświetlany jest widok różnicowy sterty (czerwona strzałka skierowana w górę pokazuje rosnącą liczbę obiektów (po lewej) lub zwiększający się rozmiar sterty (po prawej)). Po kliknięciu prawego linku uzyskasz widok sterty różnicowej uporządkowany przez obiekty, które zwiększyły największy rozmiar sterty. Może to pomóc w określeniu problemów z pamięcią. Na przykład, na poniższej ilustracji, bajty, które były używane przez obiekty
ClassHandlersStore
, zwiększyły się o 3492 bajtów w drugiej migawce.
widok różnicowy sterty narzędzi diagnostycznych narzędzi diagnostycznych
widok różnic sterty narzędzi diagnostycznych widok różnic sterty narzędzi diagnostycznych
Jeśli zamiast tego klikniesz link po lewej w widoku Użycie pamięci, widok sterty jest uporządkowany według liczby obiektów; obiekty określonego typu, które najbardziej zwiększyły swoją liczbę, są wyświetlane na górze (posortowane według kolumny Różnica liczby).
Instrumentacja
Narzędzie instrumentacji jest podobne do narzędzia Użycie CPU, z tą różnicą, że zapewnia dokładne liczniki wywołań i rzeczywisty czas zamiast wykorzystania CPU. Metoda instrumentacji wymaga większego obciążenia niż narzędzie Użycie procesora. To narzędzie jest dostępne w profilerze wydajności. Otwórz Profiler wydajności, wybierając pozycję Debugowanie>Profiler wydajności (lub Alt + F2). Aby uzyskać więcej informacji, zobacz Instrumentation.
Sprawdzanie operacji we/wy pliku
Narzędzie do operacji wejścia/wyjścia plików pomaga zrozumieć, jak możesz zoptymalizować działania wejścia/wyjścia plików, aby zwiększyć wydajność aplikacji. Jeśli próbujesz zbadać i zdiagnozować powolne czasy ładowania, nowe narzędzie File IO może pomóc zrozumieć, jak operacje we/wy wpływają na twój czas. To narzędzie jest dostępne w profilerze wydajności. Otwórz profiler wydajności, wybierając pozycję Debug > Performance Profiler (lub Alt + F2).
Narzędzie wyświetla operacje odczytu i zapisu plików w widoku listy z kartami.
Zbadanie wydajności za pomocą PerfTips
Często najprostszym sposobem wyświetlania informacji o wydajności jest użycie perfTips. Korzystając z PerfTips, można wyświetlać informacje o wydajności podczas interakcji z kodem. Możesz sprawdzić informacje, takie jak czas trwania zdarzenia (mierzony od momentu ostatniego wstrzymania debugera lub uruchomienia aplikacji). Na przykład, jeśli przeprowadzasz debugowanie kodu (F10, F11), PerfTips pokaże czas działania aplikacji między poprzednim a bieżącym krokiem.
Możesz użyć narzędzia PerfTips, aby sprawdzić, jak długo trwa wykonanie bloku kodu lub jak długo trwa ukończenie pojedynczej funkcji.
Etykietki wydajności pokazują te same zdarzenia, które są również wyświetlane w widoku Events narzędzi diagnostycznych. W widoku zdarzeń można wyświetlić różne zdarzenia występujące podczas debugowania, takie jak ustawienie punktu przerwania lub wykonywanie kroku w kodzie.
Notatka
Jeśli masz program Visual Studio Enterprise, możesz również zobaczyć zdarzenia IntelliTrace na tej karcie.
Analizowanie kodu asynchronicznego (.NET)
Narzędzie .NET Async umożliwia analizowanie wydajności kodu asynchronicznego w aplikacji. To narzędzie jest dostępne w profilerze wydajności. Otwórz profilera wydajności, wybierając pozycję Debugowanie>Profiler wydajności (lub Alt + F2).
Narzędzie wyświetla każdą operację asynchroniową w widoku listy. Możesz wyświetlić informacje, takie jak czas rozpoczęcia, czas zakończenia i całkowity czas dla operacji asynchronicznych.
narzędzie asynchroniczne .NET zatrzymane
To narzędzie jest obsługiwane w przypadku aplikacji .NET Core i .NET 5+.
Analizowanie kodu asynchronicznego (.NET)
Narzędzie .NET Async umożliwia analizowanie wydajności kodu asynchronicznego w aplikacji. To narzędzie jest dostępne w profilerze wydajności. Otwórz Profiler wydajności, wybierając Debugowanie>Profiler wydajności (lub Alt + F2).
Narzędzie wyświetla każdą operację asynchroniową w widoku listy. Możesz wyświetlić informacje, takie jak czas rozpoczęcia, czas zakończenia i całkowity czas dla operacji asynchronicznych.
narzędzie asynchroniczne platformy
To narzędzie jest obsługiwane w przypadku aplikacji .NET Core i .NET 5+.
Analizowanie wydajności bazy danych (.NET)
W przypadku aplikacji .NET Core i .NET 5+ korzystających z platformy ADO.NET lub Entity Framework Core narzędzie Database umożliwia rejestrowanie zapytań bazy danych, które aplikacja wykonuje podczas sesji diagnostycznej. Następnie możesz analizować informacje o poszczególnych zapytaniach, aby znaleźć miejsca, w których można poprawić wydajność aplikacji. To narzędzie jest dostępne w profilerze wydajności. Otwórz Profilera Wydajności, wybierając Debugowanie >Profiler Wydajności (lub naciśnij Alt + F2).
Narzędzie wyświetla każde zapytanie w widoku listy. Możesz wyświetlić informacje, takie jak czas rozpoczęcia i czas trwania zapytania.
Wizualizowanie liczników platformy .NET (.NET)
Począwszy od programu Visual Studio 2019 w wersji 16.7, możesz użyć narzędzia .NET Counters w programie Visual Studio, aby wizualizować liczniki wydajności. Liczniki utworzone za pomocą liczników dotnet można wizualizować. . NET Counters obsługują wiele wskaźników, takich jak użycie procesora i rozmiar sterty śmieciarza.
Narzędzie wyświetla wartości na żywo dla każdego licznika w widoku listy.
To narzędzie jest obsługiwane w przypadku aplikacji .NET Core i .NET 5+.
Zbadaj zdarzenia aplikacji
Ogólny podgląd zdarzeń umożliwia wyświetlanie aktywności aplikacji za pomocą listy zdarzeń, takich jak ładowanie modułu, uruchamianie wątku i konfiguracje systemu, aby lepiej zdiagnozować działanie aplikacji bezpośrednio w profilerze programu Visual Studio. To narzędzie jest dostępne w profilerze wydajności. Otwórz Profil wydajności, wybierając pozycję Debugowanie>Profil wydajności (lub Alt + F2).
Narzędzie wyświetla każde zdarzenie w widoku listy. Kolumny zawierają informacje o każdym zdarzeniu, takie jak nazwa zdarzenia, sygnatura czasowa i identyfikator procesu.
Zobacz zdarzenia niestandardowe na wykresach osi czasu
Można programowo tworzyć zdarzenia niestandardowe, które są wyświetlane jako ikony na wykresach osi czasu, takich jak wykresy czasu użycia procesora CPU i pamięci. Aby uzyskać więcej informacji, zobacz Dodawanie znaków użytkownika do osi czasu.
Analizowanie użycia zasobów (XAML)
W aplikacjach XAML, takich jak aplikacje klasyczne systemu Windows WPF i aplikacje platformy UWP, można analizować użycie zasobów przy użyciu narzędzia Oś czasu aplikacji. Możesz na przykład przeanalizować czas spędzony przez aplikację przygotowującą ramki interfejsu użytkownika (układ i renderowanie), obsługę żądań sieci i dysków oraz w scenariuszach, takich jak uruchamianie aplikacji, ładowanie strony i zmiana rozmiaru okna. Aby użyć narzędzia, wybierz Oś czasu aplikacji w profilerze wydajności, a następnie wybierz Uruchom. W aplikacji zapoznaj się ze scenariuszem z podejrzanym problemem z użyciem zasobów, a następnie wybierz pozycję Zatrzymaj zbieranie, aby wygenerować raport.
Niska liczba klatek na sekundę na wykresie Wydajność wizualna może odpowiadać za problemy wizualne widoczne podczas uruchamiania aplikacji. Podobnie, duże liczby na wykresie wykorzystania wątku interfejsu użytkownika mogą również wiązać się z problemami z reakcją interfejsu użytkownika. W raporcie możesz wybrać okres, gdzie podejrzewasz problem z wydajnością, a następnie przeanalizować szczegółowe działania wątku interfejsu użytkownika w widoku szczegółów osi czasu w dolnym okienku.
Narzędzie do profilowania linii czasowej aplikacji
Narzędzie profilowania osi czasu aplikacji
W widoku Szczegółów osi czasu można znaleźć informacje, takie jak typ działania (lub zaangażowany element interfejsu użytkownika) wraz z czasem trwania działania. Na przykład na ilustracji zdarzenie Layout dla kontrolki Grid przyjmuje 57,53 ms.
Aby uzyskać więcej informacji, zobacz harmonogram aplikacji .
Badanie wydajności interfejsu użytkownika i wydarzeń ułatwień dostępu (UWP)
W aplikacjach platformy UWP można włączyć analiza interfejsu użytkownika w oknie Diagnostic Tools. Narzędzie wyszukuje typowe problemy z wydajnością lub ułatwieniami dostępu i wyświetla je w widoku zdarzeń podczas debugowania. Opisy zdarzeń zawierają informacje, które mogą pomóc w rozwiązywaniu problemów.
Analizowanie użycia procesora GPU (Direct3D)
W aplikacjach Direct3D (składniki Direct3D muszą znajdować się w języku C++), możesz sprawdzić aktywność na procesorze GPU i analizować problemy z wydajnością. Aby uzyskać więcej informacji, zobacz użycie procesora GPU. Aby użyć narzędzia, wybierz Użycie procesora GPU w Profilerze Wydajności, a następnie wybierz Start. W aplikacji przejrzyj scenariusz, który chcesz profilować, a następnie wybierz pozycję Zatrzymaj zbieranie, aby wygenerować raport.
Po wybraniu okresu na wykresach i wybraniu wyświetl szczegóły, szczegółowy widok pojawi się w dolnej części. W widoku szczegółowym możesz sprawdzić, ile aktywności dzieje się na każdym procesorze CPU i procesorze GPU. Wybierz zdarzenia w najniższym okienku, aby uzyskać wyskakujące okienka na osi czasu. Na przykład wybierz zdarzenie Prezentuj, aby wyświetlić wyskakujące okienka wywołania Prezent. (Jasnoszare pionowe linie VSync można użyć jako odniesienia, aby zrozumieć, czy niektóre wywołania Present spowodowały brak synchronizacji VSync. Powinno istnieć jedno wywołanie Present między każdym dwoma zdarzeniami VSync, aby aplikacja mogła stabilnie osiągnąć 60 FPS.)
Możesz również użyć wykresów, aby określić, czy istnieją wąskie gardła wydajności związane z procesorem CPU, czy związane z procesorem GPU.
Analizowanie wydajności (starsze narzędzia)
W programie Visual Studio 2019 starsze narzędzia eksploratora wydajności i powiązanych narzędzi profilowania, takich jak Kreator wydajności, zostały złożone w profilerze wydajności, które można otworzyć przy użyciu narzędzia Debug>Performance Profiler. W profilerze wydajności dostępne narzędzia diagnostyczne zależą od wybranego celu i bieżącego otwartego projektu startowego. Narzędzie użycia CPU zapewnia możliwości próbkowania obsługiwane wcześniej w Kreatorze wydajności. Narzędzie Instrumentacja zapewnia instrumentowaną możliwość profilowania (w przypadku dokładnych liczników wywołań i czasów trwania), które znajdowały się w Kreatorze wydajności. Dodatkowe narzędzia pamięci są również wyświetlane w profilerze wydajności.
Narzędzie Performance Explorer