الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه the programmer 1 في 26 أكتوبر 2009 · 6 رد · 490 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أسعد الله مساؤكم إخواني ..

في السابق في لغة سي بلاس بلاس كنا نستطيع حساب حجم كائن من خلال التعليمة

Sizeof

فهل من طريقة في سي شارب تمكنني من حساب حجم كائن

If you want to learn programming start with C++

#2

إذا كان الكائن managed فأحد الحلول بحساب فرق حجم الذاكرة المحجوزة للتطبيق قبل و بعد new :

			long size = GC.GetTotalMemory(true);
			int[] i = new int[1];
			size = GC.GetTotalMemory(true) - size;
			Console.WriteLine("sizeof(s) = {0}", size);

ملاحظة : العملية ليست Thread safe!

إذا كان unmanaged :

System.Runtime.InteropServices.Marshal.SizeOf(struct_obj);

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 26 أكتوبر 2009 في 20:16

#3

أخي محمد رضى شكراَ لك على الرد السريع

حاولت في الطريقة الثانية ولكن تظهر لي رسالة خطأ وهي :

An unhandled exception of type 'System.ArgumentException' occurred in WindowsFormsApplication1.exe

Additional information: Type 'WindowsFormsApplication1.Class1' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.

If you want to learn programming start with C++

#4

هذا لأنك استعملت Marshal.SizeOf() على فئة Managed. استعمل الطريقة الأولى.

بالنسبة للدالة Marshal.SizeOf() فتستعمل لمعرفةحجم بنية البيانات structure المعدة للاستعمال مع دوال Windows API مثلا. و تكون بالشكل التالي :

[StructLayout(LayoutKind.Sequential)]
private struct RECT{
	internal int Left;
	internal int Top;
	internal int Right;
	internal int Bottom;
}

تحياتي...

#5

شكراَ لك أخ محمد رضى على التفاعل

لكن الطريقة الأولى غير آمنة مطلقاَ

فلا توجد طريقة أخرى لمعرفة حجم كائن في الوضع الآمن

If you want to learn programming start with C++

#6
اقتباس
فلا توجد طريقة أخرى لمعرفة حجم كائن في الوضع الآمن

من ناحية أولى, أشاركك طرح نفس السؤال لمجرد المعرفة بالشيء. من ناحية أخرى, أريد أن أعرف فيما فد نحتاج لمعرفة حجم كائن managed.

تحياتي...

#7

أخ محمد رضى ..

حاولت أن أقوم بعمل سيريالايز لكائن بواسطة الأدوات المستخدمة في سي شارب وكانت تعمل الطريقة

لكن عندما حاولت مع كائن غير قابل للسيريالايز مثل كائن الفورم مثلاَ وجدت أنه لا يمكن فعل ذلك فبدأت أبحث عن طريقة للوصول إلى الكائن حيث أننا نستطيع الوصول للكائن من خلال مؤشر إلى ذلك الكائن ولكنني أحتاج لمعرفة حجم الكائن كي أقوم بنسخ الذاكرة بدءاَ من عنوان الكائن وبحجم الكائن وبذلك أحصل على مصفوفة من نوع بايت تمثل الكائن وعندها استطيع حفظها في ملف ومن ثم استرجاعها .

إذا كان في عندك اقتراح أفضل أخ محمد أرجو التفضل به وأشكرك على المتابعة للموضوع

تم تعديل هذه المشاركة بواسطة the programmer 1 في 28 أكتوبر 2009 في 14:04

If you want to learn programming start with C++

مواضيع مشابهة