2009-10-28 13 views
5

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

+0

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

Odpowiedz

1

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:

+0

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

+0

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

+0

To nie jest prawda w przypadku niektórych ograniczonych zasobów systemowych, takich jak uchwyty GDI ... –

0

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?

Powiązane problemy