تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف ندمر او نحذف الكلاس من الذاكرة
#5
بالعادة البعض يصنع كلاس ويضع فيه كل ما لا يريد إظهاره في صفحات أكواد النوافذ ..
ولكن هذا الشيء أيضاً يعقد الأمر وليس يسهله..
الأفضل أن توزع ما تريد وضعه في كلاس على عدة كلاسات..:
مثلا :
- كلاس خاص بالتعامل مع الملفات.
- كلاس يتعامل مع قواعد البيانات.
- كلاس يتعامل مع التشفير وفك التشفير.
- .. إلخ.

وبحسب حاجتك لكل كلاس تعرف أين تعرف هذا الكلاس..
فما تحتاجه مرة واحدة لماذا تستدعيه في بداية كود النافذة ؟؟!!!   فقط استدعيه ضمن الاجراء الذي يريده..
وما تعتمد عليه في كل حين أو أغلب الاحداث بنفس القيمة عرفه في بداية الكلاس أو كود النافذة...
--
لكن أدرك جيداً أن من يحمل هذه الأكواد هو البرنامج ولست أنت..
فهي لن تثقل عليك بالمراجعة(فلا تبسطها لتسهل على نفسك .. بل كي لا يقع البرنامج بأخطاء الكائن الغير معرف أو تعارض البيانات المدخلة على الكائن بحسب تتالي الاجراءات على الكائن).  يعني (لا تبسط ولا تكرر) إلا إذا البرنامج يستدعي ذلك وليس من أجلك..

مثلا بالعادة المبرمج يعرف كائن اتصال بقاعدة البيانات كائن عام  اسمه (Conn)
ولكنه متعود بعد كل عملية يقوم بإغلاق الاتصال ..
فيقوم مثلاً بإٍتخدام الكائن لعمل اتصال بقاعدة البيانات لإدخال بيانات أو التعديل على بيانات محددة.
أثناء الاتصال يقوم بإستدعاء (إجراء يعتمد على نفس كائن الاتصال Conn) ليتحقق من عدم تكرار البيانات
فيقوم سهواً بإغلاق الاتصال للكائن (Conn) بعد التحقق من عدم تكرار البيانات(مثلاً)
ثم يتابع بكوده من أجل إدخال البيانات بما أنها غير مكرر.  فيقع بخطأ أن الكائن غير منشأ (مع العلم أنه أنشأه في بداية الكود).
فيحتار من أين جاء الخطأ وبعد ساعات من البحث ربما يكتشف أن الاجراء الذي استدعاه للتحقق من عدم تكرار البيانات هو من أغلق الاتصال..
فما الحل الآن ؟؟ هل يغير سياسته بجعل قاعدة البيانات مفتوحة دوماً  أم يغلقها بعد كل اتصال ويعلق في كل مرة ينادي إجراء ما من داخل كود آخر..
--  مثل هذه الحالة الحل فيها : هو أن ينشأ كائن اتصال جديد يستخدمه فقط في الاجراءات السريعة التي يناديها من خلال الأكواد الأخرى (مثلا ConnP)..
فهذا الكائن إن أغلقه أو تركه مفتوحاً أو أجرى عليه أي عملية أخرى لن تؤثر على سير البيانات التي سلكها في الكود الأساسي ولن يتعارض معه أبداً..

-- وعلى هذا المثال قس كثيراً من الأمور التي ستتعامل معها في برنامجك..

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

أي كلاس تقوم بتعريفه بعبارة (class C; )  لن يتم حجز له مكان أو أي بايت في الذاكرة.. 
ولكن عندما تجعله يساوي شيء ما ،، مثلاً : (class C = new class(); ) فإنه يحجز مكاناً له في الذاكرة وأصبح الان مؤثراً ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: عبد العزيز البسكري , justforit


الردود في هذا الموضوع
RE: كيف ندمر او نحذف الكلاس من الذاكرة - بواسطة Taha Okla - 11-04-24, 05:55 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مشكلة عند اخذ نص من richtextbox في الكلاس ميدو الفنان 2 1,095 06-09-22, 05:46 AM
آخر رد: ميدو الفنان
  ارجاع نوع صورة من الكلاس Mtaktak 7 1,625 08-07-22, 01:54 PM
آخر رد: Mtaktak
  [سؤال] كيفية جلب قيمة الذاكرة بالجهاز عبد الله 2 2,448 08-11-14, 07:42 PM
آخر رد: عبدالله
  متى يحصل عملية recursive لتعريف الـ Fields في الكلاس في c# <br> 1 2,310 01-08-13, 01:55 PM
آخر رد: أبو يعقوب

التنقل السريع :


يقوم بقرائة الموضوع: