Jakie są dobre profile .NET?


374

Jakich profilerów używałeś podczas pracy z programami .net i które szczególnie byś polecił?

Odpowiedzi:


285

Użyłem JetBrains dotTrace i Redgate ANTS obszernie. Są dość podobne pod względem funkcji i ceny. Oba oferują przydatne profilowanie wydajności i dość podstawowe profilowanie pamięci.

dotTrace integruje się z Resharper, co jest naprawdę wygodne, ponieważ można profilować wydajność testu jednostkowego jednym kliknięciem z IDE. Jednak dotTrace często wydaje się dawać fałszywe wyniki (np. Mówiąc, że uruchomienie metody zajęło kilka lat)

Wolę sposób, w jaki ANTS prezentuje wyniki profilowania. Pokazuje kod źródłowy, a po lewej stronie każdego wiersza mówi, ile czasu zajęło jego uruchomienie. dotTrace ma tylko widok drzewa.

Profiler EQATEC jest dość prosty i wymaga kompilacji specjalnych oprzyrządowanych wersji twoich zestawów, które następnie można uruchomić w profilerze EQATEC. Jest jednak bezpłatny.

Ogólnie wolę ANTS do profilowania wydajności, chociaż jeśli używasz Resharpera, to integracja dotTrace jest zabójczą funkcją i oznacza, że ​​bije ANTS pod względem użyteczności.

Darmowy profilator Microsoft CLR ( .Net Framework 2.0 / .Net Framework 4.0 ) to wszystko, czego potrzebujesz do profilowania pamięci .NET.

Aktualizacja 2011:

Program profilujący pamięć Scitech ma dość podstawowy interfejs użytkownika, ale wiele przydatnych informacji, w tym pewne informacje o niezarządzanej pamięci, których brakuje w dotTrace i ANTS - może się przydać, jeśli wykonujesz interakcja COM, ale jeszcze nie znalazłem żadnego profilera, który sprawia, że ​​COM problemy z pamięcią łatwe do zdiagnozowania - zwykle trzeba się wyrwać windbg.exe.

Profil ANTS pojawił się w ostatnich latach w zawrotnym tempie, a jego profil pamięci ma kilka naprawdę użytecznych funkcji, które teraz pchnęły mnie przed dotTrace jako pakiet w mojej ocenie. Mam szczęście, że mam licencje na oba, ale jeśli zamierzasz kupić jeden profil .Net zarówno pod względem wydajności, jak i pamięci, uczyń go ANTS.


5
Profiler w Visual Studio jest również bardzo łatwy w użyciu, Visual Studio 2010 jest w wersji Beta, a zatem jest również bezpłatny. W 2010 r. Wprowadzono wiele ulepszeń w zakresie przeglądania rywalizacji i współbieżności. spróbuj ...
Rick

15
@Rick Niestety profilera Visual Studio nie ma w Professional Edition ...
Drake,

Zdecydowanie nie zgadzam się z tym, że profilowanie CLR jest wszystkim, czego potrzebujesz do profilowania pamięci .NET, chociaż prawdopodobnie jest to prawdą, jeśli nie przykładasz żadnej wartości do swojego czasu. Zobacz moją odpowiedź poniżej, aby uzyskać podsumowanie najlepszych par profilerów pamięci - pomogą one znacznie szybciej znaleźć wycieki pamięci i potencjalne problemy.
Ben Robbins,

1
Aktualne wersje profilera EQUATEC nie są już darmowe.
David Schmitt

1
Wygląda na to, że EQATEC Profiler ponownie stał się darmowy dla .NET (pełne środowisko)
soren.enemaerke

88

Inne dotyczyły profilowania wydajności, ale jeśli chodzi o profilowanie pamięci , obecnie oceniam zarówno Scitech .NET Memory Profiler 3.1, jak i ANTS Memory Profiler 5.1 (aktualne wersje z września 2009 r.). Próbowałem JetBrains rok lub dwa lata temu i nie było tak dobre jak ANTS (do profilowania pamięci), więc tym razem nie zawracałem sobie głowy. Po przeczytaniu stron internetowych wygląda na to, że nie ma takich samych funkcji profilowania pamięci jak pozostałe dwa.

Zarówno ANTS, jak i profiler pamięci Scitech mają funkcje, których drugi nie ma, więc to, co najlepsze, będzie zależeć od twoich preferencji. Ogólnie rzecz biorąc, Scitech dostarcza bardziej szczegółowych informacji, podczas gdy ANTS jest naprawdę niesamowity w identyfikowaniu przeciekającego obiektu. Ogólnie rzecz biorąc, wolę ten ANTS, ponieważ jest on tak szybki w wykrywaniu możliwych wycieków.

Oto główne zalety i wady każdego z mojego doświadczenia:

Wspólne funkcje ANTS i Scitech .NET Memory Profiler

  • Funkcja analizy w czasie rzeczywistym
  • Doskonałe filmy instruktażowe na ich stronach internetowych
  • Łatwy w użyciu
  • Racjonalnie wydajny (oczywiście wolniejszy niż bez dołączonego profilera, ale nie tyle się frustruje)
  • Pokaż przypadki wycieków obiektów
  • Zasadniczo oboje całkiem dobrze sobie radzą

Mrówki

  • Filtry jednym kliknięciem, aby znaleźć typowe wycieki, w tym: obiekty utrzymywane przy życiu tylko przez procedury obsługi zdarzeń, obiekty, które są usuwane, ale wciąż żywe oraz obiekty, które są utrzymywane przy użyciu odwołania z obiektu usuwanego. Jest to prawdopodobnie zabójcza funkcja ANTS - dzięki temu wykrywanie wycieków jest niezwykle szybkie. Z mojego doświadczenia wynika, że ​​większość wycieków jest spowodowana tym, że procedury obsługi zdarzeń nie są odczepione, a ANTS po prostu prowadzi cię prosto do tych obiektów. Niesamowite.
  • Wykres zachowania obiektu. Chociaż te same informacje są dostępne w Scitech, o wiele łatwiej interpretować je w ANTS.
  • Pokazuje rozmiar z dziećmi oprócz wielkości samego obiektu (ale tylko wtedy, gdy instancja jest wybrana niestety, nie na ogólnej liście klas).
  • Lepsza integracja z Visual Studio (kliknij prawym przyciskiem myszy wykres, aby przejść do pliku)

Scitech .NET Memory Profiler

  • Pokazuje ślad stosu, gdy obiekt został przydzielony. Jest to bardzo przydatne w przypadku obiektów przydzielanych w wielu różnych miejscach. W ANTS trudno jest dokładnie ustalić, gdzie powstał wyciekły obiekt.
  • Pokazuje liczbę przedmiotów jednorazowego użytku, które nie zostały usunięte. Nie wskazuje to na wyciek, ale wskazuje możliwości rozwiązania tego problemu i poprawy wydajności aplikacji w wyniku szybszego usuwania śmieci.
  • Bardziej szczegółowe opcje filtrowania (kilka kolumn można filtrować niezależnie).
  • Prezentuje informacje o łącznej liczbie utworzonych obiektów (w tym o śmieciach zebranych). ANTS pokazuje tylko statystyki obiektów „na żywo”. Ułatwia to analizę i dostrajanie ogólnej wydajności aplikacji (np. Określenie, gdzie niepotrzebnie powstaje wiele obiektów, które niekoniecznie przeciekają).

Podsumowując, myślę, że ANTS pomaga szybciej znaleźć wyciek, podczas gdy Scitech zapewnia nieco więcej szczegółów na temat ogólnej wydajności pamięci aplikacji i poszczególnych obiektów, kiedy już wiesz, na co patrzeć (np. Śledzenie stosu podczas tworzenia). Gdyby śledzenie stosu i śledzenie niewydanych obiektów jednorazowych zostało dodane do ANTS, nie widziałbym potrzeby używania czegokolwiek innego.


Wersja 4.0 programu .NET Memory Profiler (teraz w wersji zapoznawczej) ma teraz widok wykresu. To była jedna funkcja, którą lubiłem w profilu ANTS, której Scitech nie miał (w wersji 3.1 / 3.5).
wykresy

45

Niedawno odkryłem EQATEC Profiler http://www.eqatec.com/tools/profiler . Działa z większością wersji .NET i na wielu platformach. Jest łatwy w użyciu, a jego części są bezpłatne, nawet do użytku komercyjnego.


Nie działa również przy wywołaniach ogona :( Zgłoszony błąd.
leppie

Ten jest bezpłatny tylko do użytku niekomercyjnego.
Jon Seigel

7
Było całkowicie za darmo w sierpniu '08, kiedy TrolleFar napisał swoją odpowiedź. Teraz, jak mówi Jon, jest bezpłatny tylko do użytku niekomercyjnego.
Richard Flamsholt

8
Okazuje się, że ponownie zmienili warunki licencji. Części są ponownie bezpłatne do użytku komercyjnego.
TrolleFar

Od wersji FEB2011 normalna edycja .NET do samodzielnego użytku / reklamy jest bezpłatna. To narzędzie jest fajne, ponieważ działa na modelu klient / serwer i może profilować / omijać powtarzające się granice (np. Profil macierzysty> COM-> NET-> COM-> NET). Interfejs użytkownika jest raczej okropny :-)

31

[ Pełne ujawnienie ]

Chociaż nie jest tak w pełni funkcjonalny, jak niektóre inne wymienione tutaj profile profilujące pamięć .NET, na rynku pojawiła się nowa pozycja o nazwie JustTrace . Został stworzony przez Telerik, a jego głównym celem jest ułatwienie i szybsze śledzenie / profilowanie dla wszystkich typów aplikacji (web / Silverlight / desktop).

Jeśli kiedykolwiek zauważyłeś, że profilowanie i optymalizacja są zastraszające lub powolne w przypadku innych narzędzi, JustTrace może być wart spojrzenia.


12
Kiedy idę, aby go pobrać i wypróbować, Telerik chce, żebym „zarejestrował się” i „utworzył konto”. Wszystkie te przyciski subskrypcji biuletynu są domyślnie zaznaczone. Z przyjemnością spróbuję JustTrace, ale nie, jeśli Telerik utrudni to.
Ryan Lundy,

1
Dzięki za próbę, Kyralessa. Wiemy, że proces ten można ulepszyć. Pracujemy nad tym teraz. Mamy nadzieję wkrótce usunąć te przeszkody. Na razie po prostu odznacz pola, a za 2 minuty możesz założyć konto i bezpłatnie pobrać JustTrace. Przepraszamy za kłopoty krótkoterminowe. -T
Todd

9
napisz z powrotem i daj mi znać, kiedy mogę pobrać bez tworzenia konta, a ja spróbuję.
Ryan Lundy,

4
Aktualizacja: Dzisiaj mogłem pobrać za pomocą linku w odpowiedzi bez konieczności tworzenia konta.
Ryan Lundy






9

Pracuję z JetBrains dotTrace dla WinForm i aplikacji konsolowych (jeszcze nie testowane na ASP.net) i działa całkiem dobrze:

Ostatnio dodali także „Licencję osobistą”, która jest znacznie tańsza niż licencja korporacyjna. Jeśli jednak ktoś zna jakieś tańsze lub nawet darmowe, też chciałbym usłyszeć :-)


7

Nie zapomnij o niesamowitym profilerze pamięci scitech .net

Jest świetny do śledzenia, dlaczego w Twojej aplikacji .net kończy się pamięć.


1
Bardzo fajne narzędzie. Łatwy w użyciu i pozwala poruszać się po wykresie obiektowym. Szczególnie podoba mi się śledzenie pamięci „w czasie rzeczywistym”. Pokazuje, jak rozwija się liczba obiektów w czasie wykonywania aplikacji.
lowglider

5

Dodałbym, że zdolność dotTrace do różnicowania pamięci i sesji śledzenia wydajności jest absolutnie nieoceniona (ANTS może również mieć funkcję różnicowania pamięci, ale nie widziałem różnicy wydajności).

Będąc w stanie przeprowadzić sesję profilowania przed naprawą lub ulepszeniem błędu, a następnie porównać wyniki, jest niezwykle cenny, szczególnie w przypadku gigantycznej starszej aplikacji .NET (jak w moim przypadku), w której wydajność nigdy nie była priorytetem i gdzie znalezienie wąskich gardeł może być BARDZO nudne. Wykonanie porównania przed i po pozwala zobaczyć zmianę liczby połączeń dla każdej metody i zmianę czasu trwania każdej metody .

Jest to pomocne nie tylko podczas zmian kodu, ale także w przypadku aplikacji korzystającej z innej bazy danych, powiedzmy, dla każdego klienta / klienta. Jeśli jeden klient skarży się na powolność, możesz uruchomić sesję profilowania przy użyciu jego bazy danych i porównać wyniki z „szybką” bazą danych, aby określić, które operacje przyczyniają się do spowolnienia. Oczywiście istnieje wiele narzędzi wydajności po stronie bazy danych, ale czasami naprawdę pomagam zobaczyć wskaźniki wydajności od strony aplikacji (ponieważ jest to bliższe temu, co faktycznie widzi użytkownik).

Podsumowując: dotTrace działa świetnie, a diff jest nieoceniony.


4

AQTime jest rozsądny, ale ma trochę krzywej uczenia się i nie jest tak łatwy w użyciu, jak wbudowany w Team Suite



3

Obecna wersja SharpDevelop (3.1.1) ma ładny zintegrowany profiler. Jest dość szybki i bardzo dobrze integruje się z SharpDevelop IDE i jego programem uruchamiającym NUnit. Wyniki są wyświetlane w elastycznym stylu drzewa / listy (użyj LINQ, aby utworzyć własny wybór). Podwójne kliknięcie wyświetlonej metody powoduje bezpośrednie przejście do kodu źródłowego.


2

W przeszłości współpracowałem z profilerem RedGate. Wykonałam pracę dla mnie.


2

Nie próbowałem tego sam, ale może dotTrace ? Ich aplikacja ReSharper jest z pewnością dobra. Być może dotTrace też jest :)


1
Użyłem dotTrace i mogę go polecić.
Jon Skeet

2

Wątpię, aby profiler dostarczany z Visual Studio Team System był najlepszym profilerem, ale wielokrotnie stwierdziłem, że jest wystarczająco dobry. Czego konkretnie potrzebujesz poza tym, co oferuje VS?

EDYCJA: Niestety jest dostępna tylko w VS Team System, ale jeśli masz do niej dostęp, warto to sprawdzić.


1
Mówiłem o jednym w VS2008, ale może nie być dostępny we wszystkich wersjach (używam VSTS). Z filmów PDC2008 wygląda na to, że profiler znacznie poprawi się w VS2010.
Brian Rasmussen

1
Ten profiler jest dostępny tylko w wersjach Visual Studio Team Systems.
Chris Brandsma,

Visual Studio Team System (Developer Edition) ma profiler. Zobacz < microsoft.com/visualstudio/en-us/products/teamsystem/… >.
gix

Visual Studio ma profiler od VS 2005. Jest dostępny tylko z Team System. Właśnie dlatego używam systemu zespołowego (w pracy mam profesjonalistę). Moim zdaniem jest to bardzo dobry profiler.
konfigurator

Jest to dobry profiler, ale nie do końca odpowiada nowej wersji ANTS.
mqp

2

Najnowsza wersja profilera pamięci ANTS (myślę, że to 5) po prostu świetnie się gra !!! Prześladowałem wyciek przy użyciu WinDbg i SOS, ponieważ wcześniej okazało się to najlepszym sposobem, potem wypróbowałem ANTS i dostałem to w kilka minut. Naprawdę wspaniałe oprogramowanie.


2

Chciałbym dodać swoją java i profiler .net, uwielbiam to dla Javy, ale nie próbowałem jeszcze wersji .NET.


1

Niestety, większość profilerów, które wypróbowałem, zawiodła podczas używania wywołań ogona, w szczególności ANTS. Po prostu skończę pisać. W CodeProject istnieje prosta implementacja, której można użyć jako podstawy.



1

Muszę zwrócić uwagę na niesamowite narzędzie, z którego kiedyś korzystałem. AVICode Interceptor Studio . W mojej poprzedniej firmie korzystaliśmy z tego wspaniałego narzędzia do profilowania aplikacji internetowej ( ma to być największa pojedyncza aplikacja internetowa na świecie i największy cywilny projekt informatyczny, jaki kiedykolwiek zrealizowano ). Zespół ds. Wydajności dokonał cudów za pomocą tego wspaniałego narzędzia. Konfiguracja jest trudna, ale jest to jednorazowa czynność i powiedziałbym, że warto. Sprawdź tę stronę, aby uzyskać szczegółowe informacje.

Dzięki, James


1

Dla mnie SpeedTrace jest najlepszym narzędziem na rynku, ponieważ pomaga nie tylko znaleźć wąskie gardła w aplikacjach. Pomaga również w scenariuszach rozwiązywania problemów, aby dowiedzieć się, dlaczego aplikacja uległa awarii, instalacja nie została zainstalowana, aplikacja się zawiesiła, wydajność aplikacji jest czasami niska w zależności od danych wejściowych, np. W celu identyfikacji wolnych transakcji db.


1

Niedawno testowałem JustTrace firmy Telerik i chociaż jest on daleki od gotowego produktu, faceci idą w dobrym kierunku.


1

Jeśli problem dotyczy licencjonowania, możesz wypróbować WINDBG do profilowania pamięci


1

Profiler NuMega True Time żyje w DevPartner Studio firmy Micro Focus. Zapewnia szczegółowe informacje o poziomie linii i metody dla aplikacji .NET wymagających tylko PDB, nie wymaga źródła (ale pomaga). Może rozróżniać algorytmicznie trudne procedury w porównaniu z tymi z długimi operacjami we / wy, używając naszego zastrzeżonego sterownika synchronizacji trybu jądra na wątek. Wersja 10.5 jest dostarczana z nową obsługą 64 procesów w dniu 4 lutego 2011 r. Bezwstydna wtyczka: Pracuję na linii produktów DevPartner. Kontynuuj na stronie http://www.DevPartner.com, aby uzyskać informacje o uruchomieniu wersji 10.5.

Oświadczenie: Jestem menedżerem produktu w DevPartner w Micro Focus.


witamy w SO. Będziesz musiał ujawnić wszelkie relacje DevPartnerowi lub zostaniesz uznany za spamera i traktowany jako taki. Widzę, że odpowiedziałeś na szereg pytań dotyczących profilowania ...
John Saunders

0

Za pomocą tego znalazłem wiele problemów w dużej aplikacji w języku C # .

Zwykle problem pojawia się podczas uruchamiania lub zamykania, gdy ładowane są wtyczki, a struktury dużych danych są tworzone, niszczone, serializowane lub deserializowane. Często są one tworzone i inicjowane więcej niż jeden raz, a procedury obsługi zmian są dodawane wiele razy, dodatkowo komplikując problem.

W takich przypadkach program może być tak powolny, że tylko 2 próbki są wystarczające, aby wskazać winne metody wywoływania metod / funkcji / właściwości.


0

W mojej firmie wybraliśmy YourKit Profiler dla platformy .NET, ponieważ była to najlepsza wartość (cena w porównaniu do funkcji). Dla małej firmy, która chce mieć elastyczne licencje (licencje zmienne), był to idealny wybór - ANTS był wówczas medalionem dla deweloperów.

Dało nam to także możliwość dołączenia do uruchomionego procesu, co nie było możliwe w przypadku dotTrace. Uważaj jednak, że dołączanie nie jest najlepszą opcją, ponieważ wszystko .NET spowolni, ale był to jedyny sposób na profilowanie aplikacji .NET uruchomionych przez inne procesy. Jeśli chodzi o cechy, ANTS i dotTrace były lepsze - ale ostatecznie YourKit był wystarczająco dobry.


Od stycznia 2012 r. YourKit podniósł ceny za profiler YourKit. Dlatego przewaga cenowa może już nie być ważna.

0

Jeśli korzystasz z ASP.NET MVC, możesz wypróbować MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.