Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
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 wycieku 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 przechwycić ślad systemu i
- Jak analizować ślad systemu.
Po przeanalizowaniu śladu systemu zalecamy wskazówki dotyczące stosowania 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óra obecnie znajduje się w pamięci — to jedna miara użycia pamięci aplikacji.
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. Mniejsze użycie pamięci pomaga również w zwiększeniu responsywności systemu i ogólnie w doświadczeniu użytkownika aplikacji, ponieważ aplikacja nie wypiera innej zawartości pamięci.
Przemieszczanie pamięci może wystąpić, gdy system próbuje zachować treści w pamięci, które były ostatnio dostępne, a w razie potrzeby przycina i przenosi na dysk treści używane wcześniej. Gdy użytkownik powróci do powłoki lub innej aplikacji, a niezbędne dane nie są obecne 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 plików danych, takich jak bazy danych, 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 znaczącym źródłem użycia pamięci oraz miejscem, gdzie pojawiają 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.
Zarejestruj ślad systemowy do analizy użycia 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ótkie śledzenie może służyć do przechwytywania rozruchu 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łe śledzenie, trwające zwykle kilka minut, jest przydatne 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 (program PowerShell lub wiersz polecenia) w trybie administratora. (Jeśli nie działa w trybie administratora, może zostać wyświetlony kod błędu: 0xc5585011 "Nie można włączyć zasad w celu 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
Analizuj ślad 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 Eksploratora wykresów rozwiń sekcję Pamięć, kliknij prawym przyciskiem myszy wykres Łączna liczba zatwierdzeń i wybierz polecenie Dodaj wykres do nowego widoku analizy.
Otwórz Edytor widoków , 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. Stos zatwierdzeń zawiera ścieżkę kodu prowadzącą do alokacji 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.
Przefiltruj proces(y), które cię interesują, klikając prawym przyciskiem myszy na proces i wybierając pozycję Filtruj według 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 operacji zatwierdzania, w celu dowiedzenia się, które funkcje mają przydzieloną pamięć. Stosy commitów będą potrzebować załadowanych symboli. Aby załadować symbole, wybierz pozycję Śledzenie>Załaduj symbole na górnym pasku menu nawigacji.
Stosowanie analizy śladów, aby zmniejszyć zużycie 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 w trybie tle: System posiada polityki dotyczące starzenia stron z zestawu roboczego 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 przez zminimalizowanie pracy w tle, co również przekłada się na użycie mniejszej ilości pamięci w tle.
Zwalnianie zasobów w tle: Podczas działania aplikacji może ona tworzyć pamięci podręczne i przydziały graficzne na potrzeby obsługi interfejsu użytkownika. Alokacje tego rodzaju mogą być zwolnione, gdy aplikacja zostanie zminimalizowana lub stanie się niewidoczna. Aplikacja może zarejestrować się w celu otrzymywania powiadomień o niskim poziomie pamięci, aby podjąć odpowiednie działania, ale lepszą strategią może być zwolnienie pamięci po upływie okresu nieaktywności, gdy aplikacja uznaje, ż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 zachować ostrożność w celu zrównoważenia tego rodzaju oszczędności pamięci z reaktywnoś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 test porównawczy stanu stałego, w którym płaskowyż użycia pamięci aplikacji lub nie zwiększa się poza określoną wartość. Stały stan można ustanowić, używając aplikacji ciągle lub pozostawiając ją bezczynnie w tle. Korzystając ze śladu przechwyconego w celu zidentyfikowania możliwego wycieku pamięci, możesz znaleźć miejsce przydzielania tej pamięci w swoim kodzie i sposób jej zwolnienia po wykorzystaniu. 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 we/wy zapewnią znacznie lepszą przepływność dysku, gdy zawartość jest ciągła i może być uzyskiwana sekwencyjnie lub przy użyciu większych operacji we/wy.
Pełny dysk może przekładać się na dłuższe opóźnienia zapisu w systemach opartych na dyskach SSD. Jeśli jest mniej pustych komórek do absorbowania zapisów, operacja zapisu może wymagać przeprowadzenia operacji odczytu-zmodyfikowania-zapisu, co spowalnia wydajność.
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:
Stosuj zasady „pay-for-play” do wykorzystania przestrzeni dyskowej (pobieraj tylko to, czego potrzebujesz): Aplikacja może zawierać szeroką gamę funkcji, które nie dotyczą 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 przekłada się na mniejszy ślad na dysku w trakcie 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.