معرفة حجم كائن .net


Answers

يرجى اتباع الخطوات التالية للحصول على حجم الكائن.

1) انتقل إلى فيسوال ستوديو (2010) خصائص المشروع -> علامة التبويب تصحيح -> تمكين تصحيح التعليمات البرمجية غير المدارة.

2) الذهاب إلى القائمة التصحيح فيسوال ستوديو -> الخيار والإعدادات -> التصحيح -> الرموز.

3) هناك تمكين ميكروسوفت سيمبول سيرفر، وترك الافتراضي. (قد تبدأ الرموز تحميل)

4) تعيين نقطة فاصل في التعليمات البرمجية الخاصة بك، بدء التصحيح (F5).

5) فتح تصحيح -> ويندوز -> نافذة فورية.

6) أدخل .load sos.dll (ابن سترايك)

7) أدخل! دومبهاب -type ميكلاس (الكائن الذي تريد أن تجد الحجم)

8) من أصل وضع تحديد عنوان الكائن أي (00a8197c)

العنوان مت سيز 00a8197c 00955124 36

9) التالي،! أوبجسيزي 00a8197c

10) هناك تذهب -> سيزوف (00a8197c) = 12 (0x48) بايت (ميكلاس)

Question

أحاول معرفة مقدار الذاكرة التي تأخذها كائناتي لمعرفة كم منهم ينتهي بهم المطاف إلى كومة كائن كبير (أي شيء أكثر من 85،000 بايت).

هل هي بسيطة مثل إضافة 4 ل إنت، 8 لفترة طويلة، 4 (أو 8 إذا كنت على 64 بت) لأي أنواع مرجعية الخ لكل كائن، أو هناك النفقات العامة للطرق والخصائص الخ




إذا كنت تستطيع - تسلسل ذلك!

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



ما لم يكن نوع فاليتيب ضخم أو نوع مثيل (أي العديد من الآلاف من الحقول)، والأنواع الوحيدة التي تحتاج إلى القلق حول صفائف كبيرة، أو سلاسل. وبطبيعة الحال، لمعرفة حجم مصفوفة، تحتاج إلى معرفة حجم العنصر.

.NET (حاليا) محاذاة أنواع في نفس الطريقة التي المحاربين الأصلي محاذاة أنواع. الأنواع الأساسية لديها التحالفات الطبيعية التي عادة ما تكون قوة ما يقرب من تقريب المتابعة اثنين من أقرب إلى حجمها:

Single, Int32, UInt32 - 4
IntPtr, UIntPtr, pointers, references  - 4 on 32-bit, 8 on 64-bit
Double, Int64, UInt64 - 8
Char, Int16, UInt16   - 2
Byte, SByte           - 1

عند تجميع نوع، سيقوم المحول البرمجي بالتأكد من أن جميع الحقول من أي نوع معين لديها إزاحة البداية في المثال الانحياز إلى الحدود التي تتطابق مع هذا النوع - على افتراض أن التخطيط الصريح لا يتم استخدامها.

الأنواع التي يحددها المستخدم نفسها لها محاذاة، والتي يتم حسابها على أنها أعلى محاذاة أي من أنواع الحقول الخاصة بهم. يتم توسيع حجم النوع إذا لزم الأمر لجعل حجم من نوع محاذاة جدا.

ولكن بالطبع، جميع أنواع المرجع لا تزال فقط IntPtr.Size في الحجم والمحاذاة، وبالتالي فإن حجم نوع المرجع لن يؤثر صفائف من هذا النوع.

لاحظ أن كلر قد تختار، وفقا لتقديرها، لأنواع تخطيط مختلفة مما هو موضح أعلاه، ربما لزيادة موقع ذاكرة التخزين المؤقت أو تقليل الحشو المطلوبة من قبل المحاذاة.