2011-06-21 12 views

Odpowiedz

1

Jak sugerowali inni, profilery pamięci, Memprofiler jest zdecydowanie najbardziej zaawansowany (wypróbowałem wszystkie istniejące profilery .NET). Ma 14-dniową wersję próbną.

+0

Od patrząc na rozprawie wygląda bardzo dobrze! –

3

Co na przykład .NET Profiler Memory z ANTS na przykład. Może CLR Profiler.

0

Nasze zespoły ds. Kontroli jakości używają http://www.jetbrains.com/profiler/ dla tego rodzaju rzeczy, gdy napotykamy na wąskie gardła. Jestem prawie pewien, że da ci listę alokacji przez wywołanie metody. Pójdę go zainstalować i sprawdź :)

0

Dobry stary windbg + sos + pdb spowoduje zrzucenie. Co do "gdzie w kodzie źródłowym zostały one utworzone" część - jest niemożliwe bez oprzyrządowania lub wtrysku.

3

Ta informacja nie jest dostępna, jeśli utworzysz zrzut pamięci. Aby to zebrać, musisz monitorować proces w trakcie jego działania. Możesz uruchomić aplikację przez WinDbg i ustawić punkty przerwania na wszystkich konstruktorach, którymi jesteś zainteresowany (mam nadzieję, że nie chcesz patrzeć na każdy obiekt).

Jeśli utworzysz punkt przerwania, więc zrzuca stos, będziesz mieć punkt tworzenia obiektu. Należy jednak pamiętać, że obiekty mogą się poruszać podczas GC, co utrudni parowanie obiektów ze stosami (lub w niektórych przypadkach nawet niemożliwe).

Ponieważ twoje pytanie jest oznaczone jako wydajność i profilowanie, rozumiem, że chcesz zmniejszyć alokację pamięci. Dlaczego nie wystarczy spojrzeć na liczbę utworzonych obiektów (lub ewentualnie spojrzeć na największe stworzone obiekty), patrząc na stertę. Następnie przejdź do kodu źródłowego i dowiedz się, gdzie tworzone są takie instancje.

1

Potrzebujesz profilera pamięci .NET. Narzędzia te pozwalają śledzić wykresy obiektów na stadzie zbierającym śmieci i mogą być bardzo przydatne w identyfikacji źródeł wycieków pamięci. Chociaż niekoniecznie muszą one wskazywać metodę, w której obiekt został utworzony, będą wskazywać, które instancje klas trzymają się obiektów i pozwalają na zrobienie różnic w skokach sterty gc. Nie wymagają modyfikacji kodu źródłowego. Możesz rzucić okiem na What Are Some Good .NET Profilers?

Powiązane problemy