Mamy aplikację, która jest mieszana .NET 2.0 i natywna C++. W naszych testach mamy tryb, który może automatycznie przechodzić przez zestaw projektów. Projekt otwiera się, uruchamia, zamyka, powtarzaj. Każdy z tych kroków wymaga stworzenia/zniszczenia okien (precyzyjne winoteki). Ostatnio doświadczyliśmy pewnych dziwnych zachowań w wydajności. Po kilkugodzinnym uruchomieniu części otwierające i zamykające spowalniają (blokują wątek gui i pokazują na wpół wyciągnięte ekrany itp.). Teraz łatwo byłoby to zablokować do wycieku zasobów ... ale śledzimy uchwyty i pamięć, a gdy pamięć rośnie nieznacznie, nic nie wskazuje na ten poziom problemu. Uchwyty są stabilne. Więc może zwisające programy obsługi zdarzeń ... nadal muszą to zbadać. Ale kicker, który mnie wprawia w zakłopotanie, polega na tym, że wyłączenie aplikacji i jej ponowne uruchomienie nie przywraca początkowej wydajności. Jest nadal powolny, dopóki nie zrestartuję systemu operacyjnego (wygrana XP), a wydajność znów zacznie być szybka. To naprawdę wprawia mnie w zakłopotanie, ponieważ zakładam, że zamknięcie aplikacji spowoduje odzyskanie wszystkich zasobów. jakieś pomysły?Nieparzysta degradacja wydajności w aplikacji
Odpowiedz
Wyciekałyśmy klas okien
Brzmi jak możliwy wyciek z uchwytem GDI. GDI objects nie są automatycznie zbierane przez Garbage Collector.
.NET Profiler Memory (http://memprofiler.com/) wykonuje dobrą robotę śledzenia (jest 14-dniowa wersja próbna).
Widzieliście te:
Resource Leaks: Detecting, Locating, and Repairing Your Leaky GDI Code
Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP (ma link do narzędzia widza GDI uchwyt).
Porzucę użycie Profiler pamięci. Pozwala na robienie migawek i porównywanie ich - dzięki czemu możesz zrobić migawkę w jednej iteracji, wziąć kolejną na następną i rozróżnić je - możesz zobaczyć, co dokładnie rośnie pomiędzy zwykłymi iteracjami Twojej aplikacji. – stusmith
Mam .NET Memory Profiler i spróbuję tego, ale fakt, że ponowne uruchomienie aplikacji (bez restartu) nie naprawi problemu, nie zostanie wyjaśnione przez nic w procesie rozwoju. – user109078
To nie jest prawda w przypadku niektórych ograniczonych zasobów systemowych, takich jak uchwyty GDI ... –
Zakładasz, że jest to wyciek zasobów (co nie jest złe), ale może to być coś innego.
Czy próbowałeś używać profilera wydajności?
- 1. JavaScript degradacja wydajności rekurencyjna funkcja
- 2. org.apache.commons.codec.DecoderException: nieparzysta liczba znaków
- 3. Zwiększenie wydajności aplikacji ASP.NET
- 4. Regex Nieparzysta/parzysta kwota
- 5. Regex: nieparzysta liczba wystąpień char
- 6. Nieparzysta składnia w API "String :: concat"
- 7. ASP.NET kwestia wydajności aplikacji na Windows Azure
- 8. Wpływ układu WPF (Silverlight) Przekształcanie wydajności aplikacji
- 9. Kanoniczna metoda pomiaru wydajności uruchamiania aplikacji iOS?
- 10. W jaki sposób kompilator JIT pomaga w wydajności aplikacji?
- 11. Płynna degradacja poza domeną aplikacji internetowych: jak duży jest to problem?
- 12. Użyj licznika wydajności w aplikacji sieciowej self host
- 13. Jak wyłączyć standardowe liczniki wydajności w analizie aplikacji?
- 14. Profilowanie wydajności w systemie Linux
- 15. Dowolne narzędzia do monitorowania wydajności usług IIS i aplikacji
- 16. Dostrajanie wydajności aplikacji nokautującej - wskazówki dotyczące poprawy czasów odpowiedzi
- 17. VisualVM Nie pokazano JAKICHKOLWIEK metod wymaganych dla wydajności wydajności Profili
- 18. Licznik wydajności SignalR nie jest wyświetlany w monitorze wydajności
- 19. JRuby/TorqueBox dla aplikacji o wysokiej wydajności/znaczeniu krytycznym
- 20. Czy nieparzysta liczba zawsze zwraca piętro po podzieleniu z resztą?
- 21. Narzędzia do profilowania wydajności aplikacji .NET Compact Framework
- 22. Nieparzysta nazwa programu podczas instalowania podpisanego instalatora msi
- 23. Sprawdzanie, czy wartość NSInteger jest nieparzysta, czy nawet
- 24. Mierzenie wydajności klientów
- 25. Wpływ wydajności wirtualnego dziedziczenia
- 26. Zwiększanie wydajności ASP.net WebForm
- 27. testowanie wydajności witryny internetowej
- 28. Zwiększenie wydajności Symfony2 AppCache
- 29. Optymalizowanie wydajności w Berkeley DB
- 30. Używanie wydajności w języku C#
Należy uruchomić aplikację pod profilerem przed i po spowolnieniu i porównać oba wyniki. Wszystko, co wyróżnia się jako drastycznie odmienne, warte jest zbadania. Jest wiele darmowych, dobrych lub darmowych i dobrych profilerów, po prostu wypróbuj kilka i wybierz jedną, z której czujesz się komfortowo. – Rom