Wskazówki: profilowanie aplikacji
W tym przewodniku przedstawiono sposób profilowania aplikacji w celu identyfikacji problemów z wydajnością.
W tym przewodniku przedstawione będą kroki procesu profilowania zarządzanej aplikacji oraz izolowanie i identyfikowanie problemów z wydajnością w aplikacji za pomocą pobierania próbek i instrumentacji.
W tym przewodniku będą przeprowadzone następujące kroki:
Profilowanie aplikacji za pomocą metody pobierania próbek.
Analizowanie próbkowanych wyników profilowania w celu zlokalizowania i rozwiązania problemu z wydajnością.
Profilowanie aplikacji za pomocą metody instrumentacji.
Analizowanie instrumentowanych wyników profilowania w celu zlokalizowania i rozwiązania problemu z wydajnością.
Wymagania wstępne
Średnio zaawansowana znajomość języka C#.
Aby pracować z informacjami dostarczonymi przez proces profilowania, najlepiej jest posiadać dostępne informacje dotyczące symboli debugowania.
Profilowanie przy użyciu metody pobierania próbek
Pobieranie próbek jest metodą profilowania, podczas której proces jest okresowo sondowany w celu określenia aktywnej funkcji.Dane wynikowe dostarczają liczbę informującą o tym, jak często funkcji o której mowa była na szczycie stosu wywołań podczas pobierania próbek procesu.
Profilowanie aplikacji za pomocą metody pobierania próbek
Otwórz Visual Studio z uprawnieniami administratora.Uruchomianie jako administrator jest wymagane do profilowania.
Otwórz rozwiązanie PeopleTrax.
Rozwiązanie PeopleTrax wypełnia teraz Eksplorator rozwiązania.
Ustaw ustawienie konfiguracji projektu na Wydanie.
Aby wykrywać problemy z wydajnością w aplikacji, należy użyć kompilacji wydania.Dla profilowania zalecana jest kompilacja wydania, ponieważ kompilacja do debugowania zawiera dodatkowe informacje, które mogą negatywnie wpłynąć na wydajność i niedokładnie ilustrować problemy z wydajnością.
W menu Analizuj kliknij Uruchom Kreatora wydajności.
Pojawi się Kreator wydajności.
Upewnij się, że zaznaczone jest Pobieranie próbek Procesora (zalecane), a następnie kliknij przycisk Dalej.
W Którą aplikację chcesz wybrać do profilowania wybierz PeopleTrax, a następnie kliknij przycisk Dalej.
Visual Studio skompiluje projekt i uruchomi aplikację do profilowania.Pojawi się okno aplikacji PeopleTrax.
Kliknij Pobierz ludzi.
Kliknij EksportDanych.
W Notatniku zostanie otwarty i wyświetlony nowy plik zawierający wyeksportowane dane z PeopleTrax.
Zamknij program Notatnik, a następnie zamknij aplikację PeopleTrax.
Profiler generuje plik profilowania danych (*.vsp), wyświetla nazwę pliku w sekcji Raporty okna Eksplorator wydajności i automatycznie ładuje widok Podsumowanie pliku danych w głównym oknie Visual Studio.
Analizowanie wyników profilowania otrzymanych metodą próbkowania
Widok Podsumowanie wyświetla oś czasu wykorzystania procesora w trakcie przebiegu profilowania, listę Ścieżki krytycznej reprezentującą gałąź drzewa wywołań aplikacji, która był najbardziej aktywna oraz listę Funkcji wykonywania większości pracy, która zawiera funkcje, które były najczęściej próbkowane podczas wykonywania kodu w ciele własnej funkcji.
Sprawdź listę Ścieżki krytycznej i zauważ, że metoda PeopleNS.People.GetNames jest najbliżej końca listy funkcji PeopleTrax.Jej położenie powoduje, że jest dobrym kandydatem do analizy.Kliknij nazwę funkcji, aby wyświetlić szczegóły GetNames w widoku Szczegóły funkcji.
Widok Szczegóły funkcji zawiera dwa okna.Okno podziału kosztów dostarcza graficznego widoku wykonanej przez funkcję pracy, pracy wykonanej przez funkcje, które zostały przez nią wywołane oraz wpływ funkcji, które wywołały tę funkcję na liczbę próbkowanych wystąpień.Można zmienić funkcję, która posiada fokus widoku, klikając nazwę funkcji.Można na przykład kliknąć PeopleNS.People.GetPeople, aby funkcja GetPeople została wybrana.
Okno Widok kodu funkcji zawiera kod źródłowy funkcji jeżeli jest on dostępny i podkreśla najdroższe wiersze w wybranej funkcji.Gdy zaznaczone jest GetNames można zobaczyć, że ta funkcja odczytuje ciąg z zasobów aplikacji, a następnie używa StringReader, aby dodać każdy wiersz w ciągu do ArrayList.Nie istnieje oczywisty sposób optymalizacji tej funkcji.
Ponieważ PeopleNS.People.GetPeople jest jedyną funkcją wywołującą GetNames, kliknij GetPeople w oknie dystrybucji kosztów w celu zbadania jej kodu.Metoda ta zwraca ArrayList obiektów PersonInformationNS.PersonInformation z nazwami osób i przedsiębiorstw wyprodukowanych przez GetNames.Jednakże metoda GetNames jest wywoływana dwukrotnie przy każdym tworzeniu obiektu PersonInformation.Można zobaczyć, że metodę tę można łatwo zoptymalizować tworząc listy tylko raz na początku metody i indeksując do tych list podczas tworzenia pętli PersonInformation.
Alternatywna wersja GetPeople jest dostarczona wraz z przykładowym kodem aplikacji i można wywołać funkcję zoptymalizowaną przez dodanie symbolu kompilacji warunkowej do właściwości kompilacji.W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt People, a następnie kliknij przycisk Właściwości.Kliknij Kompilacja w menu strony właściwości, a następnie wpisz OPTIMIZED_GETPEOPLE w polu tekstowym symbolu kompilacji warunkowej.Zoptymalizowana wersja GetPeople zastąpi oryginalną metodę podczas następnej kompilacji.
Uruchom ponownie sesję wydajności.Kliknij na pasku narzędzi Eksplorator wydajności Uruchom z profilowaniem.Kliknij Pobierz ludzi a następnie kliknij przycisk Eksportuj dane.Zamknij okno programu Notatnik, które się pojawi, a następnie zamknij aplikację People Trax.
Generowany jest nowy plik danych profilowania a widok Podsumowanie dla nowych danych pojawia się w głównym oknie Visual Studio.
Aby porównać dwa przebiegi profilowania, zaznacz dwa pliki danych w Eksploratorze wydajności, kliknij na plikach prawym przyciskiem myszy, a następnie kliknij Porównaj raporty wydajności.Zostanie wyświetlone okno Raportu porównawczego w głównym oknie Visual Studio.Kolumna Delta przedstawia zmianę wartości wydajności funkcji z wcześniejszej wartości Bazowej do późniejszej wartości Porównania.Można wybrać wartości do porównywania z listy rozwijanej Kolumna.Wybierz % Przykładów włącznie.
Należy zauważyć, że metody GetPeople i GetNames wykazują znaczny wzrost wydajności.
Profilowanie przy użyciu metody Instrumentacji
Instrumentacja jest metodą profilowania, w której profiler wstawia funkcje sondy do specjalnie skompilowanych wersji profilowanych plików binarnych.Sondy zbierają informacje chronometrażu czasu wejścia i wyjścia z funkcji w instrumentowanych modułach i we wszystkich miejscach wywołania tych funkcji.Proces instrumentacji jest przydatny w przypadku badanie problemów związanych z operacjami wejścia i wyjścia, jak zapisywanie na dysk i komunikacja za pośrednictwem sieci.Instrumentacja dostarcza bardziej szczegółowych informacji niż metoda pobierania próbek, ale jest bardziej naruszające wykonanie procesu i powoduje większą ilość narzutów.Pliki binarne instrumentacji są także większe od plików debugowania lub wydania i nie są przeznaczone do wdrażania.
W tej sekcji przewodnika zostanie użyta metoda instrumentacji mająca na celu odkrycie kolejnych fragmentów kodu, które można zoptymalizować w aplikacji PeopleTrax, która była wcześniej profilowana.Przy użyciu filtru osi czasu widoku Podsumowanie można skoncentrować analizę na scenariuszu eksportu danych w profilowanej aplikacji, w której lista osób jest zapisywana do pliku Notatnika.
Profilowanie istniejącej aplikacji przy użyciu metody instrumentacji
W razie potrzeby otwórz aplikację PeopleTrax w programie Visual Studio.
Upewnij się, że została uruchomiona z uprawnieniami Administratora oraz że konfiguracja kompilacji dla rozwiązania jest ustawiona na Wydanie.
W Eksploratorze wydajności kliknij Instrumentacja.
Na pasku narzędzi Eksplorator wydajności kliknij Uruchom z profilowaniem.
Profiler skompiluje projekt i uruchomi profilowanie aplikacji.Pojawi się okno aplikacji PeopleTrax.
Kliknij Pobierz ludzi.
Siatka danych PeopleTrax zostanie wypełniona danymi.
Poczekaj około 10 sekund, a następnie kliknij przycisk Eksportuj dane.
Zostanie uruchomiony program Notatnik i wyświetlony nowy plik zawierający listę osób z aplikacji PeopleTrax.Oczekiwanie umożliwia łatwiejszą identyfikację procedury eksportu danych dla filtrowania.
Zamknij program Notatnik, a następnie zamknij aplikację PeopleTrax.
Program Visual Studio wygeneruje raport sesji wydajności (*.vsp).
Analizowanie wyników profilowania otrzymanych metodą instrumentacji
Wykres osi czasu widoku Podsumowanie tego raportu pokazuje wykorzystanie przez program procesora w czasie trwania przebiegu profilowania.Operacja eksportu danych powinna być pokazana jako duży skok lub płaski fragment po prawej stronie wykresu.Można filtrować sesję wydajności tak, aby wyświetlić i analizować tylko te dane, które zostały zebrane podczas operacji eksportu.Kliknij na wykresie na lewo od punktu, gdzie rozpoczyna się operacja eksportu danych.Kliknij ponownie po prawej stronie operacji.Następnie kliknij Filtruj według zaznaczenia na liście łączy po prawej stronie osi czasu.
Drzewo Ścieżki krytycznej pokazuje, że metoda Concat, która jest wywoływana przez metodę PeopleTrax.Form1.ExportData zużywa duży procent czasu.Ponieważ metoda System.String.Concat jest także na szczycie listy Funkcji wykonywania większości pracy, skrócenie czasu spędzonego w tej funkcji jest prawdopodobnym punktem optymalizacji.
Kliknij dwukrotnie System.String.Concat w dowolnej tabeli podsumowania, aby uzyskać więcej informacji w widoku Szczegóły funkcji.
Można zobaczyć, że PeopleTrax.Form1.ExportData jest jedyną metodą, która wywołuje Concat.Kliknij PeopleTrax.Form1.ExportData na liście Funkcji wywołania, aby wybrać tę metodę jako docelową widoku Szczegóły funkcji.
Zbadaj metodę w oknie Widoku kodu funkcji.Zauważ, że nie ma żadnych wywołań literałowych do System.String.Concat.Zamiast tego, jest kilka użyć argumentu operacji +=, które kompilator zamienia na wywołania System.String.Concat.Wszelkie zmiany ciągu w .NET Framework powodują przydzielenie nowego ciągu..NET Framework zawiera klasę StringBuilder, która jest zoptymalizowana pod kątem łączenia ciągów.
Aby zastąpić ten problematyczny obszar kodem zoptymalizowanym, należy dodać OPTIMIZED_EXPORTDATA jako symbol kompilacji warunkowej do projektu PeopleTrax.
W oknie Eksploratora rozwiązań kliknij prawym przyciskiem myszy projekt PeopleTrax, a następnie kliknij Właściwości.
Pojawi się formularz Właściwości projektu PeopleTrax.
Kliknij kartę Kompilacja.
W polu tekstowym Symbole kompilacji warunkowej wpisz OPTIMIZED_EXPORTDATA.
Zamknij formularz właściwości projektu i wybierz polecenie zapisz wszystkie po wyświetleniu monitu.
Po ponownym uruchomieniu aplikacji zostaną wyświetlone oznaczone poprawki w wydajności.Zalecane jest ponowne uruchomienie sesji profilowania, nawet jeśli poprawki wydajności są widoczne dla użytkownika.Przeglądanie danych po rozwiązaniu problemu jest ważne, ponieważ pierwszy problem mógł przesłaniać inny problem.
Zobacz też
Informacje
/Z7, /Zi, /ZI (Format informacji o debugowaniu)
Koncepcje
Informacje o narzędziach profilowania