Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku pokazano, jak poprawić wydajność aplikacji systemu Windows na dwa podstawowe sposoby:
Minimalizowanie użycia pamięci
Istnieje wiele sposobów zminimalizowania ilości pamięci używanej przez aplikację systemu Windows, można wykonywać następujące czynności:
- Zmniejszanie użycia pamięci pierwszego planu
- Minimalizuj pracę w tle
- Zwalnianie zasobów w tle
- Upewnij się, że aplikacja nie ma wycieków pamięci
Aby odpowiednio zminimalizować użycie pamięci, należy najpierw zrozumieć:
- jak pamięć jest używana i przydzielana przy użyciu zestawu roboczego, pamięci dynamicznej i alokacji wirtualnej,
- jak przechwytywać ślad systemowyi
- jak analizować ślad systemu.
Po przeanalizowaniu śladu systemu zalecamy wskazówki dotyczące Zastosowanie analizy śledzenia w celu zmniejszenia użycia pamięci.
Zestaw roboczy, pamięć dynamiczna i alokacja wirtualna
Zestaw roboczy aplikacji — zestaw stron w wirtualnej przestrzeni adresowej, które aktualnie znajdują się w pamięci — jest jedną z miar użycia pamięci przez aplikację.
Ilość pamięci używanej przez aplikację ma wpływ na wydajność środowiska uruchomieniowego, a także czas reakcji całego systemu. Zminimalizowanie użycia pamięci pomoże aplikacji w lepszej wydajności dzięki zmniejszeniu kosztów procesora CPU związanych z uzyskaniem większej ilości pamięci. Niższe zużycie pamięci pomaga również w zwiększeniu responsywności systemu oraz poprawia ogólne wrażenia użytkownika aplikacji, ponieważ aplikacja nie przemieszcza innych danych w pamięci.
Przemieszczanie pamięci może wystąpić, gdy system próbuje zachować zawartość w pamięci, do której ostatnio uzyskiwano dostęp, a w razie potrzeby przycina i stronicuje wcześniej używaną zawartość. Gdy użytkownik przełączy się z powrotem do powłoki lub innej aplikacji, a niezbędne dane nie znajdują się w pamięci, dane będą musiały zostać odczytane z dysku. Użytkownik prawdopodobnie zauważy spowolnienie z powodu tego procesu.
Istnieją dwa kluczowe elementy pamięci używane przez aplikację: 1) pamięć dynamiczna i 2) pamięć wspierana przez plik. Użycie pamięci opartej na plikach pochodzi z plików binarnych i danych, takich jak bazy danych, które są używane przez aplikację. Często nie jest to znaczna część użycia pamięci aplikacji i często stała. (Wyjątki to aplikacje do przetwarzania danych, kompilacja kodu itp.) Bardziej znaczącym źródłem użycia pamięci i miejscem, w którym manifest przecieków jest pamięć dynamiczna.
Pamięć dynamiczna odpowiada pamięci wirtualnej przydzielonej przez aplikację przy użyciu procedur alokacji pamięci. W przeciwieństwie do pamięci opartej na plikach, która utrzymuje się podczas ponownego uruchamiania systemu, pamięć dynamiczna istnieje tylko przez okres istnienia aplikacji. Pamięć dynamiczna jest często głównym źródłem zużycia pamięci i miejscem, w którym przejawiają się wycieki pamięci.
Procedury alokacji wirtualnej (VirtualAlloc) obsługują żądania alokacji pamięci z aplikacji systemu Windows niezależnie od procedury warstwy aplikacji używanej do alokacji pamięci. Chociaż nie wszystkie pamięci przydzielone przez aplikację mogą znajdować się w pamięci przez cały czas, analizowanie takich alokacji zapewnia spójny sposób zrozumienia użycia pamięci aplikacji.
Aby zrozumieć użycie pamięci aplikacji i znaleźć miejsca do wprowadzenia ulepszeń, zalecamy przechwycenie śladu VirtualAllocation zgodnie z poniższym opisem.
Przechwyć ślad systemu, aby przeanalizować użycie pamięci
Rejestrowanie aktywności urządzenia w danym okresie jest nazywane śledzeniem systemu. Śledzenie systemu tworzy plik śledzenia, który może służyć do generowania raportu i pomaga określić, jak zwiększyć wydajność aplikacji.
Ślady mogą się różnić w zależności od długości:
- Krótki ślad uruchomieniowy może służyć do przechwytywania uruchomienia aplikacji. Może to obejmować przejście aplikacji do stanu nieaktywnego, w którym okno aplikacji jest zminimalizowane lub okna aplikacji są zamykane, gdy proces aplikacji będzie się powtarzać.
- Długotrwała analiza, zwykle trwająca kilka minut, jest przydatna w diagnozowaniu przecieków pamięci. Jeśli użycie pamięci nadal rośnie w miarę upływu czasu, zwykle jest to sugestywne wycieku.
Istnieje wiele narzędzi do monitorowania użycia pamięci, w tym:
Na potrzeby tego artykułu skupimy się na używaniu Analizatora wydajności systemu Windows. Aby dowiedzieć się więcej na temat wybierania narzędzia do profilowania wydajności aplikacji, zobacz Wybieranie między profilerem wydajności programu Visual Studio, zestawem narzędzi Windows Performance Toolkit i perfView.
Aby przechwycić ślad:
Otwórz wiersz polecenia ( PowerShell lub Wiersz Polecenia) w trybie administratora . (Jeśli nie uruchomisz programu w trybie administratora, może pojawić się kod błędu: 0xc5585011, "Nie udało się aktywować polityki profilowania wydajności systemu").
Wprowadź polecenie:
wpr -start VirtualAllocation -filemodeUruchom scenariusz, który badasz. (Na przykład uruchomienie aplikacji).
Wprowadź polecenie:
wpr -stop Trace.etl
Przeanalizuj śledzenie systemu
Aby dowiedzieć się, które funkcje aplikacji mają przydzieloną pamięć, którą można zmniejszyć, należy teraz przeanalizować przechwycony ślad systemu. Aby przeanalizować ślad:
Otwórz ślad przy użyciu narzędzia Windows Performance Analyzer, wprowadzając polecenie:
wpa.exe Trace.etlW oknie programu Graph Explorer rozwiń sekcję Pamięć, kliknij prawym przyciskiem myszy na wykresie Całkowite zatwierdzenie, a następnie wybierz opcję Dodaj wykres do nowego widoku analizy.
Otwórz Edytor Widoku , klikając koło zębate Ustawienia i wybierając następujące rozmieszczenie kolumn: Proces, Typ Zatwierdzenia, Stos Zatwierdzeń i Rozmiar.
Kliknij nagłówek kolumny Rozmiar, aby wyniki zostały posortowane w kolejności malejącej. Commit Stack pokazuje ścieżkę kodu prowadzącą do przydzielania pamięci. Te wyniki mogą pomóc zrozumieć przyczynę alokacji. Sortowanie według rozmiaru pozwala skupić się na większych alokacjach i zbadać, czy istnieje możliwość optymalizacji.
Filtruj procesy, które są dla Ciebie interesujące, klikając prawym przyciskiem myszy na procesie i wybierając Filtruj do zaznaczenia.
Aby powiększyć swój region zainteresowania w obszarze wyświetlania, wybierz zakres, kliknij prawym przyciskiem myszy wykres i wybierz pozycję Powiększ.
Przejdź przez stos zatwierdzń, aby dowiedzieć się, które funkcje mają przydzieloną pamięć. Stosy zatwierdzeń będą wymagać symboli załadowanych. Aby załadować symbole, wybierz pozycję Trace>Załaduj symbole na górnym pasku menu nawigacyjnego.
zrzut ekranu śledzenia pamięci w analizatorze wydajności Windows

Stosowanie analizy śledzenia w celu zmniejszenia użycia pamięci
Podczas analizowania przydzielonej pamięci znajdziesz wskazówki ułatwiające określenie, gdzie można zminimalizować użycie pamięci.
Kilka obszarów, które należy wziąć pod uwagę w odniesieniu do stosowania analizy śledzenia w celu zaktualizowania kodu w celu zmniejszenia użycia pamięci, obejmują:
Zmniejszenie użycia pamięci na pierwszym planie: analizowanie śladu pamięci może pomóc w zidentyfikowaniu niepotrzebnego użycia pamięci na pierwszym planie i zaktualizowaniu kodu w celu zmniejszenia lub usunięcia tego użycia.
Minimalizacja pracy podczas działania w tle: System posiada zasady dotyczące starzenia się stron z zestawów roboczych procesu. Użycie mniejszej ilości pamięci w tle pozwala systemowi być bardziej wydajne dzięki zachowaniu mniejszej ilości pamięci aplikacji. Dowiedz się więcej o tym, jak poprawić zużycie energii i żywotność baterii, minimalizując pracę w tle, co także prowadzi do mniejszego użycia pamięci w tle.
Zwolnij zasoby w tle: W czasie wykonywania aplikacja może tworzyć pamięci podręczne, a także alokacje grafiki do obsługi interfejsu użytkownika. Te alokacje mogą być zwalniane, gdy aplikacja jest zminimalizowana lub niewidoczna. Aplikacja może zarejestrować się w celu otrzymywania powiadomień o niskiej ilości pamięci, aby podjąć takie działania, ale lepszą strategią może być zwolnienie pamięci po okresie jej nieużywania, gdy aplikacja uzna, że jest nieaktywna. Ten okres braku użycia może się różnić w zależności od aplikacji, więc możliwe wskaźniki nieaktywności mogą wahać się od kilku minut do 1/2 godziny lub więcej. Należy zadbać o zrównoważenie tego rodzaju oszczędności pamięci z responsywnością. Jeśli pamięć podręczna jest kosztowna do ponownego skompilowania, aplikacja może zdecydować się zachować ją przez cały okres istnienia aplikacji.
Upewnij się, że aplikacja nie przecieka pamięci: Aby sprawdzić przecieki pamięci, najpierw ustanów punkt odniesienia dla stanu ustalonego, w którym zużycie pamięci aplikacji osiąga stały poziom lub nie wzrasta powyżej określonej wartości. Ten stały stan można ustanowić przez ciągłe korzystanie z aplikacji lub pozostawienie jej bezczynnej w tle. Korzystając ze śladu przechwyconego w celu zidentyfikowania możliwego wycieku pamięci, możesz znaleźć miejsce przydzielania tej pamięci w kodzie i sposób jego zwolnienia po jego użyciu. Jeśli pamięć nadal rośnie w miarę działania aplikacji, prawdopodobnie wskazuje to na wyciek pamięci. Powiększ obszar odpowiadający wzrostowi w ramach śledzenia i dokładnie przeanalizuj stosy zatwierdzeń.
Efektywne korzystanie z miejsca na dysku
Ślad dysku odnosi się do rozmiaru aplikacji, gdy jest on przechowywany w stanie nieaktywnym (nie jest wykonywany kod). Jeśli aplikacja zajmuje dużo miejsca na dysku, może to być okazja do optymalizacji.
Istnieje kilka sposobów, dzięki czemu zmniejszenie zużycia dysku aplikacji może zwiększyć wydajność:
Gdy dysk staje się pełny, system plików nie może już przechowywać nowej zawartości w ciągły sposób. Pełny dysk staje się fragmentowany, przechowując nową zawartość w sektorach nieciągłych. Przekłada się to na dłuższy czas opóźnienia, gdy ta zawartość jest uzyskiwana z dysku. Systemy I/O zapewnią znacznie lepszą przepustowość dysku, jeśli dane są spójne i można je przetwarzać sekwencyjnie lub przy użyciu większych operacji I/O.
Pełny dysk może przekładać się na dłuższe opóźnienia zapisu w systemach opartych na dyskach SSD. Jeśli istnieje mniej pustych komórek do absorbowania zapisów, operacja zapisu może spowodować powstanie operacji odczytu-zmiany-zapisu, co spowalnia wydajność systemu.
Pełny dysk może utrudniać aktualizowanie aplikacji. Mimo że system operacyjny jest odporny i może zapewnić aktualność i bezpieczeństwo systemu, nawet przy niskiej dostępnej ilości dostępnego miejsca na dysku, dobrą ilość dostępnego miejsca na dysku na potrzeby przemieszczania zawartości aktualizacji aplikacji przekłada się na szybsze, bezproblemowe środowisko aktualizacji.
Wymaganie znacznej ilości dużego miejsca na dysku, które ma być dostępne w czasie wykonywania, również przekłada się na użycie pamięci. Będzie to miało wpływ na czas odpowiedzi aplikacji i systemu w ogóle. Ponadto, jeśli w czasie wykonywania wymagana jest niewielka część miejsca na dysku, aplikacja może używać mało wydajnego miejsca na dysku.
Oto kilka sposobów zmniejszenia lub zwiększenia wydajności miejsca na dysku:
Stosować zasady "płać za to, co używasz" na dysku: pobieraj tylko potrzebne elementy.: Aplikacja może zawierać szeroki zakres funkcji, które nie są stosowane przez wszystkich użytkowników. Może to być jeden z powodów dużego zużycia dysku. Stosując zasady "pay-for-play," możesz poprosić użytkowników o wybranie tylko tych funkcji, które są im potrzebne, co oznacza mniejszą ilość zajmowanego miejsca na dysku podczas pobierania aplikacji. Dodatkowa zawartość jest opcjonalna do pobrania tylko wtedy, gdy użytkownik potrzebuje bardziej zaawansowanych możliwości. Oprócz funkcji można zastosować te same zasady "pay-for-play" do obsługi języków. Aplikacja może domyślnie zawierać podzbiór popularnych opcji językowych, z dodatkowymi językami opcjonalnymi lub zależnymi od lokalizacji ustawionej w systemie użytkownika.
Stosowanie efektywnego określania rozmiaru pamięci podręcznej: w niektórych przypadkach aplikacja może używać pamięci podręcznych na dysku, aby zapewnić użytkownikom większą szybkość reakcji. Zasady można ustawić pod kątem sposobu zarządzania pamięcią podręczną przez aplikację, z górnym limitem ustawionym na rozmiar pamięci podręcznej na podstawie pojemności dysku i zmianą rozmiaru pamięci podręcznej, gdy ilość dostępnego miejsca na dysku jest niska.
Stosowanie wydajnego korzystania z zasobów: aplikacja często będzie zawierać zasoby obrazów i może składać się z zakresu rozmiaru obrazu w celu obsługi wielu rozdzielczości. Optymalizacja rozmiaru obrazu, wymiarów, formatu i kompresji podzestawu rozdzielczości oraz wykorzystanie skalowania w celu obsługi pozostałych rozdzielczości może znacznie zmniejszyć zużycie dysku.
Zbadaj możliwości optymalizacji binarnej: narzędzia, takie jak SizeBench, umożliwiają autorom aplikacji zbadanie, co przyczynia się do wykorzystania danych binarnych i znalezienie możliwości zmniejszenia ilości używanego miejsca na dysku.
Dodatkowe zasoby
Windows developer