10-03-14, 03:31 PM
السلام عليكم
سامحوني منشغل جدا
اليوم اكتشفت ان برنامجي يستهلك من الرام ما يقارب 200 ميجا ويتوقف البرنامج ويجبرك الويندوز علي اغلاقه
وبعد البحث في الكود بالكامل والجهد الجهيد اليكم المشكلة والحل
المشكلة كانت
عند انشاء كائن جديد
Dim dd As New TextBox
ثم اضافته مثلا الي بنل
Me.Panel1.Controls.Add(dd)
وذلك لعرض نتائج شئ معين
ثم اذا اردت ان اعرض نتيجة اخري قمت بتفريغ محتوي الـ Panel1 بهذا الشكل
Me.Panel1.Controls.Clear
هنا الخطاء هل تعلم ان dd لم يتم حذفه من الذاكرة وهو موجود وانا كنت اقوم بعض مئات النتائج بهذا الشكل وكان يظل المئات من العناصر محفوظه في الرام لم تنتهي بعد
وعالجت الامر باستبدال الكود
Me.Panel1.Controls.Clear
بكود اخر
الحل هنا في الدالة Dispose فهي تقوم بتدمير الكائن نهائيا من الذاكرة وكان ليس له وجود من الاصل
كتبت الموضوع بسرعة جدا لاني والله منشغل جدا لاكن حبيت اتناقش معكم في هذا الموضوع لاهميته واتمني من الله تعالي ان الي عنده اي معلومات حول هذا الامر يفيدنا
وجزاكم الله خيرا
سامحوني منشغل جدا
اليوم اكتشفت ان برنامجي يستهلك من الرام ما يقارب 200 ميجا ويتوقف البرنامج ويجبرك الويندوز علي اغلاقه
وبعد البحث في الكود بالكامل والجهد الجهيد اليكم المشكلة والحل
المشكلة كانت
عند انشاء كائن جديد
Dim dd As New TextBox
ثم اضافته مثلا الي بنل
Me.Panel1.Controls.Add(dd)
وذلك لعرض نتائج شئ معين
ثم اذا اردت ان اعرض نتيجة اخري قمت بتفريغ محتوي الـ Panel1 بهذا الشكل
Me.Panel1.Controls.Clear
هنا الخطاء هل تعلم ان dd لم يتم حذفه من الذاكرة وهو موجود وانا كنت اقوم بعض مئات النتائج بهذا الشكل وكان يظل المئات من العناصر محفوظه في الرام لم تنتهي بعد
وعالجت الامر باستبدال الكود
Me.Panel1.Controls.Clear
بكود اخر
كود :
For Each Obj As Object In Me.Panel1.Controls
Obj.Dispose()
Next
الحل هنا في الدالة Dispose فهي تقوم بتدمير الكائن نهائيا من الذاكرة وكان ليس له وجود من الاصل
كتبت الموضوع بسرعة جدا لاني والله منشغل جدا لاكن حبيت اتناقش معكم في هذا الموضوع لاهميته واتمني من الله تعالي ان الي عنده اي معلومات حول هذا الامر يفيدنا
وجزاكم الله خيرا