أسعد الله مساؤكم إخواني ..
في السابق في لغة سي بلاس بلاس كنا نستطيع حساب حجم كائن من خلال التعليمة
Sizeof
فهل من طريقة في سي شارب تمكنني من حساب حجم كائن
أسعد الله مساؤكم إخواني ..
في السابق في لغة سي بلاس بلاس كنا نستطيع حساب حجم كائن من خلال التعليمة
Sizeof
فهل من طريقة في سي شارب تمكنني من حساب حجم كائن
If you want to learn programming start with C++
إذا كان الكائن 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
أخي محمد رضى شكراَ لك على الرد السريع
حاولت في الطريقة الثانية ولكن تظهر لي رسالة خطأ وهي :
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++
هذا لأنك استعملت 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;
}تحياتي...
شكراَ لك أخ محمد رضى على التفاعل
لكن الطريقة الأولى غير آمنة مطلقاَ
فلا توجد طريقة أخرى لمعرفة حجم كائن في الوضع الآمن
If you want to learn programming start with C++
اقتباسفلا توجد طريقة أخرى لمعرفة حجم كائن في الوضع الآمن
من ناحية أولى, أشاركك طرح نفس السؤال لمجرد المعرفة بالشيء. من ناحية أخرى, أريد أن أعرف فيما فد نحتاج لمعرفة حجم كائن managed.
تحياتي...
أخ محمد رضى ..
حاولت أن أقوم بعمل سيريالايز لكائن بواسطة الأدوات المستخدمة في سي شارب وكانت تعمل الطريقة
لكن عندما حاولت مع كائن غير قابل للسيريالايز مثل كائن الفورم مثلاَ وجدت أنه لا يمكن فعل ذلك فبدأت أبحث عن طريقة للوصول إلى الكائن حيث أننا نستطيع الوصول للكائن من خلال مؤشر إلى ذلك الكائن ولكنني أحتاج لمعرفة حجم الكائن كي أقوم بنسخ الذاكرة بدءاَ من عنوان الكائن وبحجم الكائن وبذلك أحصل على مصفوفة من نوع بايت تمثل الكائن وعندها استطيع حفظها في ملف ومن ثم استرجاعها .
إذا كان في عندك اقتراح أفضل أخ محمد أرجو التفضل به وأشكرك على المتابعة للموضوع
تم تعديل هذه المشاركة بواسطة the programmer 1 في 28 أكتوبر 2009 في 14:04
If you want to learn programming start with C++