تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف ندمر او نحذف الكلاس من الذاكرة
#1
كل عام و انتم بخير

 Class1 c = new Class1();

c.myform = this;

اريد انهاء هذا الـ c
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة:
#2
كل عام وأنت بخير

في السي الشارب إدارة المخلفات يتم تلقائياً
أي بمجرد الانتهاء من عمل المتغير يتم التخلص منه تلقائياً..

هناك حالة استثنائية لا يتم فيها التخلص من المتغيرات تلقائياً وهي عندما تعتمد على مكتبات خارجية غير مبنية بالسي شارب أو الفيجول بيزك دوت نت..
عندها تحتاج التخلص منها من خلال الكود الخاص بالتخلص منها بالعادة يكون (Dispose) ..  
أي : 
كود :
c.Dispose();

الكلاس الذي تبنيه أنت، لا تقلق بشأنه : سيتم التخلص منه تلقائياً بعد الانتهاء من عمله(هذا العرض ساري فقط في السي شارب والفيجول بيزك دوت نت)..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: justforit
#3
شكر الله لك و بارك فيك
عندي استفسار عن الاسلوب الافضل في مناداة الكلاس في الفورم العادي هل في كل اجراء في كلاس الفورم استدعي الكلاس و مافيه ام الافضل تعريف متغير للكلاس في منطقة التعريفات العامة للفورم واستخدمه؟
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة:
#4
لماذا لا يمكن التحرير بملف الاكسل الا بعد انهائه بالكود التالي:
PHP كود :
foreach (Process pro in Process.GetProcessesByName("EXCEL"))
{
 
   pro.Kill();

أي المتغيرات التالي يجب ان يغلق أولا
PHP كود :
       public Excel.Excel.Application exapp;
 
       public Excel.Excel.Workbook exworkbook;
 
       public Excel.Excel.Worksheet exw;
 
       public Excel.Excel.Range xlrange
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة:
#5
بالعادة البعض يصنع كلاس ويضع فيه كل ما لا يريد إظهاره في صفحات أكواد النوافذ ..
ولكن هذا الشيء أيضاً يعقد الأمر وليس يسهله..
الأفضل أن توزع ما تريد وضعه في كلاس على عدة كلاسات..:
مثلا :
- كلاس خاص بالتعامل مع الملفات.
- كلاس يتعامل مع قواعد البيانات.
- كلاس يتعامل مع التشفير وفك التشفير.
- .. إلخ.

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

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

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

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

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



(11-04-24, 05:36 PM)justforit كتب : لماذا لا يمكن التحرير بملف الاكسل الا بعد انهائه بالكود التالي:
PHP كود :
foreach (Process pro in Process.GetProcessesByName("EXCEL"))
{
 
   pro.Kill();

أي المتغيرات التالي يجب ان يغلق أولا
PHP كود :
       public Excel.Excel.Application exapp;
 
       public Excel.Excel.Workbook exworkbook;
 
       public Excel.Excel.Worksheet exw;
 
       public Excel.Excel.Range xlrange
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
تم الشكر بواسطة:
#7
الاكسل من التطبيقات التي لا تقبل سوى مستخدم وحيد..
لازم بعد كل عملية أن تقوم بإغلاق الملف إن أنتهيت من المتغير الذي تستخدمه للتحرير والتعديل ..
إغلاق الملف ..
exworkbook.Close

ثم إغلاق متغير برنامج التحرير :
exapp.Quit
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: justforit


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

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


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