2010-08-20 16 views
9

Zastanawiam się, czy istnieje proste polecenie lub instrukcja w C#/.NET i/lub Visual Studio, które może mi powiedzieć, ile pamięci ma pojedynczy obiekt podejmowanie? Mam podejrzenie, że operator sizeof() będzie mnie okłamywał ... czy jestem uzasadniony w tym przekonaniu?Jak zmierzyć ilość pamięci, którą zajmuje pojedynczy obiekt .NET

Jest nieco związane pytanie here, ale nie ma jednoznacznej odpowiedzi podano, w jaki sposób mierzyć pojedynczy obiekt

Odpowiedz

7

Nie ma ostateczny sposób, ponieważ nie jest proste dla byle typu obiektu.

Co się stanie, jeśli ten obiekt zawiera odniesienia do innych obiektów? Co jeśli te inne obiekty mają odniesienia do innych obiektów? Który obiekt faktycznie posiada tę przestrzeń pamięci? Czy to ten, który ją stworzył, czy ten ostatni, który go dotknął? W dowolnym momencie może mieć różnych właścicieli. A może zależy ci tylko na tym, ile miejsca zajmuje referencja?

Jest też mnóstwo pytań, które zwróciły się to za dobrze ... Szybko okazuje się:

How to get object size in memory?

C#: Memory usage of an object

Find out the size of a .net object

How much memory does a C#/.NET object use?

i lista jest długa ...

+0

całkiem słusznie, dzięki za wskazówki –

3

Nie ma łatwego sposobu i sizeof będzie odpowiedni tylko dla typów wartości. Typowy obiekt zawiera odniesienia do list i innych obiektów, więc aby uzyskać rzeczywistą liczbę bajtów, należy przejść przez wszystkie wskaźniki i dodać również rozmiary wskaźnika.

Możesz sprawdzić interfejs API .Net Profiling lub użyć narzędzia do profilowania pamięci, np. DotTrace. Profiler pamięci pomoże Ci przynajmniej ustalić, gdzie jest przydzielana pamięć i czy przydzielanie pamięci jest problemem w twojej aplikacji. Jest to często bardziej przydatne niż rzeczywisty rozmiar obiektu.

1

Zastanawiam się, jak działa System.Runtime.InteropServices.Marshal.SizeOf()? Istnieje wiele interesujących funkcji statycznych pod obiektem Marshal, które mogą być pomocne.

+3

To ciasto też jest kłamstwem. –

+0

Intrygujące ... Spróbuję! –

Powiązane problemy