2010-08-20 14 views
9

Tek bir nesnenin ne kadar bellek olduğunu söyleyebilen C#/NET ve/veya Visual Studio'da basit bir komut veya komut olup olmadığını merak ediyorum Kalkış Sizeof() operatörünün bana yalan söyleyeceğine dair gizlice şüphe duyuyorum. Bu inançta haklı mıyım?Her bir nesnenin aldığı bellek miktarı nasıl ölçülür .NET

Orada biraz ilgili soru here olmakla kesin bir cevap o nesnenin sadece herhangi türü için basit değil çünkü kesin bir yolu yoktur Tek bir nesneyi

cevap

7

ölçmek için nasıl verilir.

Bu nesne başka nesnelere başvuru içeriyorsa ne olur? Ya diğer nesnelerin bunlara referans veren başka nesneler varsa? Hangi nesne aslında bu bellek alanına sahip? Onu oluşturan son şey mi yoksa ona dokunan son mu? Herhangi bir noktada farklı sahip olabilir. Yoksa referansın ne kadar yer aldığını mı düşünüyorsun?

sorulan soruların bir ton bu yanı ... Bir hızlı arama ortaya çıkıyor da vardır:

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?

ve liste bir devam ediyor ...

+0

oldukça doğru, işaretçiler için teşekkürler –

3

Kolay bir yol yok ve sizeof sadece değer türleri için iyi olacak. Tipik bir nesne, listelere ve diğer nesnelere yapılan referansları içerir, bu nedenle gerçek bayt sayısını elde etmek için tüm göstergelere geçmeniz ve işaretçi boyutlarını da eklemeniz gerekir.

.Net Profiling API'sine göz atabilir veya dotTrace gibi bir bellek uzmanı kullanabilirsiniz. Bir bellek uzmanı, en azından belleğin nerede tahsis edildiğini ve bellek ayırma uygulamanızda bir sorun olduğunda görmenize yardımcı olur. Bu genellikle gerçek nesne boyutundan daha yararlıdır.

1

System.Runtime.InteropServices.Marshal.SizeOf() nasıl çalışır? Marshal nesnesi altında burada yararlı olabilecek pek çok ilginç statik işlev var.

+3

Bu pasta da bir yalan. –

+0

İlgi çekici ... Denerim! –

3

Yapabilirseniz - Serileştirin!

Dim myObjectSize As Long 

Dim ms As New IO.MemoryStream 
Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter() 
bf.Serialize(ms, myObject) 
myObjectSize = ms.Position 
İlgili konular