2015-06-05 7 views
12

Używam Visual Studio do pobrania migawki pamięci mojej aplikacji.Jak odczytać migawkę pamięci w Visual Studio

Mam kilka pytań dotyczących zrozumienia danych, które otrzymałem. Po zrobieniu migawki pamięci, odfiltrowuję jedną z moich klas, na przykład MyClassPanel. Używam tylko MyClassPanel w moich plikach xmal.

  1. dlaczego „Ścieżki do root” dla MyClassPanel są „MyClassPanel [RefCount uchwytem, ​​Count: 1]”? (tj. ta sama nazwa, ale z łańcuchem [RefCount Handle na końcu] i inną wartością Count) co to oznacza? W innych klasach filtruję, że "Ścieżki do Root" to różne nazwy klas.

  2. Mam 24 MyClassPanel (z licznika w górnej tabeli). A w kolumnie "Liczba referencyjna" w dolnej tabeli, kiedy je dodaję, są one 24.

Czy tak jest zawsze? Myślę, że "Count" i "Reference Count" oznaczają różne rzeczy. W tym przypadku sumują się. Czy to ma sens?

enter image description here

+0

Znalazłem profiler pamięci Redgate jest bardziej pomocne do śledzenia problemów z pamięcią, jak to pokazują wykresy przechowywania instancji. – CharithJ

Odpowiedz

3
  1. Ścieżek Root widok pokazuje odniesienia dla tego typu utrzymując go przed zbierane śmieci. Ponieważ twoja klasa to strona Xaml, odniesienie, które utrzymuje klasę przy życiu, jest procedurą obsługi CLR dla strony Xaml. Są one wyświetlane jako uchwyt RefCount.

  2. Licznik i licznik referencyjny rzeczywiście nie są takie same. Liczba to liczba instancji, odwołanie liczy liczbę referencji. Ponieważ każda instancja w twoim przypadku ma tylko jedno odniesienie, ma sens, że się sumują.

Aby uzyskać więcej informacji: http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/20/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/net-memory-analysis-enhancements-in-visual-studio-2013.aspx

+0

Dzięki za odpowiedź. Dla # 1, czy każdy panel jest utrzymywany przy życiu przez własny program obsługi CLR? Lub 1 program obsługi CLR utrzymuje cały panel ALL. A jakie jest znaczenie "Hrabia" w uchwycie Ref Count? – n179911

+0

Publikuję zrzut ekranu dla mojego profilu pamięci. Mam pytanie. Dla numeru 2, dlaczego powiedziałeś "Ponieważ każda instancja w twoim przypadku ma tylko jedno odniesienie, to ma sens, że się sumują"?Czy mój [Ref Count Handle, Count: 1] nie ma 8 odniesień do "MyClass Panel" i [Ref Count Handle, Count: 16] ma 6 referencji "MyClass Panel"? – n179911

+0

Znaczenie "Count" w uchwycie Ref Count jest odwołaniem do liczenia obiektu com (https://en.wikipedia.org/wiki/Reference_counting). W zależności od tego, czy strona jest wczytana i przywoływana, utrzymywała się przy życiu –

0

nie jestem wielkim fanem Visual Studio analizatora Snapshot. Istnieje wiele komplikacji, jeśli finalizacja nie zostanie poprawnie wykonana przed zrobieniem migawki. Nie jestem pewien, w jaki sposób Visual Studio to obsługuje. Jednak udostępniony snapshot nie ma dla mnie większego sensu.

Proponuję pobrać profiler pamięci ANTS i zbadać to. Pochodzi z rozsądnym okresem próbnym. Korzystając z tego, będziesz mógł zobaczyć wszystkie odniesienia do każdej instancji za pomocą "Wykresu utrzymania". Pokazuje w sposób konkretny, które instancje zachowuje odwołanie do twoich obiektów, a także pokaże ci, które obiekty zostały zaimplementowane. Unieś, ale nie zadzwoń. Sądzę, że zapewni on więcej wsparcia w znalezieniu głównej przyczyny tego problemu.

Zapraszamy do obejrzenia poniżej stron Walkthrough

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/walkthrough http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

Powiązane problemy