مواضيع برمجية للنقاش ( C Sharp )

أرسل من قبل bayrn في الجمعة, 2008/08/22 - 3:57pm.
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

السلام عليكم و رحمة الله و بركاته

سوف أقوم من خلال هذا الموضوع ، بطرح بعض المفاهيم المهمة في أي لغة و لكن من خلال

لغة C# بحيث أن هذه المفاهيم مهمة جدا في بناء التطبيقات و تفوقها من حيث الأداء

المواضيع المطروحة من خلال المرجع Visual C# 2005 Stsep by Step بحيث أنني يمكن أن أقوم بترتيب الأفكار الموجودة في المرجع

استعمال تجميع المهملات و ادارة الموارد

يجب قبل أن تقرأ هذه الفقرة  أن يكون لديك معرفة بكيفية انشاء المتغيرات و الكائنات و كيف يتم

حجز الذاكرة عند انشاء كل من المتغيرات و الكائنات ، واليكم تذكرة :

يتم انشاء الأنواع المباشرة ( int for an example ) في المكدس
بينما الأنواع المرجعية تعطى مساحة من الذاكرة التكويمية

لا تملك أجهزة الحاسوب كميات لا تنفذ من الذاكرة ، لذلك يجب استردادها عندما لا يعود المتغير

أو الكائن بحاجة اليها ، كيف يتم الاسترداد ؟
 
- يتم تدمير الأنواع المباشرة و يتم استرداد ذاكرتها عندما تنتهي الطريقة التي يتم انشاؤها فيها
- لكن ماذا بشأن الأنواع المرجعية : يتم انشاء الكائن باستعمال الكلمة new ، لكن كيف ومتى

يتم تدمير الكائن ؟ هذا ما سوف نتكلم عنه .....

حياة الكائن

ماذا يحصل عندما تنشئ و تدمر كائن ؟

الانشاء كما يلي :
Circle obj = new Circl

ملاحظة : obj متغير مرجعي

ان العملية new تتألف من مرحلتين :

- يجب على العملية new حجز بعض الذاكرة الخام من الكومة ( ليست لدينا سيطرة على هذه المرحلة من عملية الانشاء )
- يجب على العملية new تحويل الذاكرة الخام الى كائن ، تمهيد الكائن ( يمكننا أن نتحكم بهذه

المرحلة من خلال استخدام ال Constructor )

ملاحظة لمبرمجوا C++
يجب أن ينتبهوا الى أنه لايمكنك في C# تحميل new تحميلا زائدا للتحكم بمرحلة الحجز

بعد عملية الانشاء ، يمكن الوصول الى أعضاء الكائن باستعمال عامل النقطة

يمكن جعل متغيرات مرجعية أخرى تشير الى نفس الكائن :

Circle ref = obj

ما هوعدد المراجع التي يمكن انشاءها الى الكائن ؟

أد ما بدك !

يجب على محرك التشغيل أن يتعقب كل تلك المراجع ، بحيث أنه اذا اختفى المتغير obj بزوال

مداه ، قد تظل هناك متغيرات أخرى مثل ( ref ) متواجدة

لذلك اخترعوا الكزالك ( عفوا Laughing )

لذلك لا يمكن ربط عمر الكائن بمتغير مرجعي معين .

يمكن تدمير الكائن فقط عندما تختفي كل المراجع اليه .

ملاحظة لمبرمجوا C++
يجب أن ينتبهوا الى أن C# لا تتضمن العامل Delete ( محرك التشغيل CLR هو من يتحكم متى سيتم تدمير الكائن )

 

تدمير الكائن :

أيضا يتألف من مرحلتين تتطابقان مع مرحلتي الانشاء :
- كتابة المدمر ( destructor )
- يجب اعادة الذاكرة الخام الى الكومة ( افلات الذاكرة التي عاش فيها الكائن ) ( ليس لدينا

سيطرة على هذه العملية  )

عملية تدمير الكائن و اعادة الذاكرة الى الكومة تسمى ( Garbage Collection )

بعد النقاش سوف ننطلق الى تجميع المهملات

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات | قراءة: 246

خيارات عرض التعليقات

اختر طريقتك المفضلة لعرض التعليقات و اضغط "حفظ الإعدادات" لتفعيل تغييراتك.
الأربعاء, 2008/08/27 - 11:41am
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

 متابعة الموضوع

كتابة المدمرات

يمكنك استعمال مدمر لتنفيذ أي ترتيب مطلوب عند لملمة نفايات الكائن.التركيب النحوي لكتابة مدمر هو : ( ~ ) يليها اسم الفئة المثال التالي :

صف يحتسب عدد التواجدات المنشأة بزيادة متحول ساكن و انقاصه في المدمر

  - لا يمكن استعمال public أو غيره للمدمر ، و ذلك لأنه لا يمكننا استدعائه GC هو الذي يستدعيه

-   لا يأخذ المدمر بارمترات لنفس السبب السابق

-   المترجم ( compiler ) يترجم المدمر تلقائيا بحيث يصل إلى Object.Finalize

إن هذه الترجمة ضمان لكي يتم استدعاء مدمر الفئةهذه الترجمة لا تجرى إلا من قبل ال Compiler ، و لا يمكن استدعاء الطريقة Finalize من قبل المبرمج 

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/08/27 - 11:46am
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

يعني أنا هون تخربطت شوي المؤلف يقول بأنه لا يمكن تدمير الكائن من قبل المبرمج ، بسبب عدم وجود أي تركيب نحوي لفعل ذلك ، بحيث أنه يتم ذلكمن قبل GC و في الفقرة السابقة يوضح عملية بناء Destructor

أنا بعرف أنه العملية هي بس لتنفيذ تعليمات معينة قبل التدمير بحيث أن التدمير يتم من قبل GC باستدعاء Finalize

طيب ألا يعد ذلك تدمير للكائن من قبل المبرمج أيضا ؟؟؟

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/09/17 - 11:28pm
صورة IT_Lover

تاريخ التسجيل: 2008-09-17
مشاركات: 2

الجامعة: غير ذلك
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الثالثة
الاختصاص: غير ذلك

Hi bayrn..
 
 The .NET garbage collector manages the memory of managed
 objects (native .NET objects) but it does not manage , nor
 is it directly able to clean up unmanaged resources.
 Managed resources are those that are cleaned up implicitly
 by the garbage collector. You do not have to write code to
 release such resources explicitly. In contrast, you must
 clean up unmanaged resources (file handles, database
 collections, etc.) explicitly in your code. 

 
دخول أو تسجيل لإرسال التعليقات