View Full Version : مشکل unload به حافظه
سعید قدیری مقدم
جمعه 15 اسفند 1382, 20:38 عصر
سلام . من یک برنامه ای رو نوشتم که توش بعضی موقعه یک یا چند پنجره show میشه و پنجره های تکراری New می شن و یعد که کارش تموم میشه و کاربر پنجره رو میبنده با دستور unload اون فرم بسته میشه من این کار رو کردم تا حافظه اضافی اشغال نشه اما وقتی داشتم برنامه رو چک میکردم متوجه شدم وقتی پنجره باز میشه چند کیلو بایت اشغال میشه و وقتی پنجره رو می بندم انتظار داشتم اون مقدار ار حافظه آزاد بشه اما متوجه شدم برای بسته شدن پنجره دوباره مقداری از حافظه اشغال شده :shock: یعنی من وقتی بصورت طولانی پنجره ها رو باز و بسته کردم تقریبا مقدار فضای اشغال شده در حافظه از 12 به 20 رسید :?
آیا راهی هست تا فضا بصورت اضافی اشغال نشه؟
S.Azish
شنبه 16 اسفند 1382, 15:08 عصر
همیشه بعد از تمام شدن کار فرم ها رو به صورت زیر از بین ببرید
'Form
Set Me = Nothing ' In form_unload event
HoneySaberi
شنبه 16 اسفند 1382, 20:17 عصر
آقای آذیش میشه بگین جریان این Nothing چیه و به چه دردایی میخوره؟
در ضمن خیلی جالب بود. آقا سعید شما سوالهای جالب و به قول معروف نکته کنکوری می پرسیا :wink:
(سیدشریفی)
یک شنبه 17 اسفند 1382, 08:51 صبح
آقا سعید من هم خیلی وقت بود این مشکل را داشتم
از جوابتان خیلی ممنون
:lol: :lol: :lol:
سعید قدیری مقدم
یک شنبه 17 اسفند 1382, 12:15 عصر
آقای آذیش از شما ممنونم :flower: من تو برنامم ازش استفاده میکنم و نتیجه رو بعدا میگم
S.Azish
یک شنبه 17 اسفند 1382, 16:24 عصر
هر متغیری که برای یک شی ساخته میشه دراصل به اون اشاره میکنه که در کجای حافظه قرار گرفته. زمانی که از Nothing استفاده میشه اون اشاره گر از بین میره و سیستم زمانی محتویات یک شی رو از حافظه پاک میکنه که هیچ متغیری به اون اشاره نکنه, پس با اینکار مطمئن میشیم که حافظه استفاده شده از بین خواهد رفت. البته موضوع درباره لود کردن کمی فرق داره (در اصل بدلیل باگی که در VB هست) که اگر مشکلتون حل نشد بگید که راه دیگری که از توابع API استفاده میشه رو بهتون بگم.
سعید قدیری مقدم
یک شنبه 17 اسفند 1382, 17:01 عصر
آقای آذیش من کدی که دادید رو امتحان کردم اما وقتی یک پنجره رو خواستم ببندم این پیام خطا را داد
Invalid use of Me keyword
در حقیقت رو Me = Nothing یک خط زرد میکشه پیام بالا رو میده :| میشه بگین اشکال کجاست و باید چی کار کرد؟
الطفا اگه امکان داشته باشه اون API ها رو هم بگین که ممنون میشم :oops:
(سیدشریفی)
دوشنبه 18 اسفند 1382, 09:10 صبح
آقای آذیش من هم مثل آقای قدیری مقدم به مشکل ایشان برخوردم و همان خطایی را که ایشان گفته اند مشاهده کردم لطفا راهنمایی فرمایید
:(
(سیدشریفی)
دوشنبه 18 اسفند 1382, 09:14 صبح
آقای آذیش چیزی به فکرم رسید
من میخواستم هنگام بسته شدن فرم این کد را استفاده کنم
ولی این دفعه توسط کد زیر پس از اینکه فرم کاملا بسته شد از این فرم استفاه نمودم
آیا این راه حل صحیح میباشد ؟
Form2.Show 1
Set Form2 = Nothing
:roll:
سعید قدیری مقدم
دوشنبه 18 اسفند 1382, 09:59 صبح
اقای سید شریفی شما این دستور رو داخل form_unload نوشتید؟
اگه اونجا نوشته باشید این مسله مشکل ساز میشه چون اولا فرم دوباره تو حافظه load میشه ثانیا فرم هایی که با متد New درست شدن با مشکل مواجه میشن :متفکر:
فکر کنم استفاده از app که آقای آذیش گفتن مناسب تر باشه
S.Azish
دوشنبه 18 اسفند 1382, 12:48 عصر
اشتباه منو ببخشید مدت زیادی که با VB کار نمیکنم و بعضی چیزا رو فراموش کردم. در اصل همونطور که آقای سید شریفی گفتن باید نام فرم رو گفت ولی در Form_Unload
Private Sub Form_Unload(Cancel As Integer)
Set Form2 = Nothing
End Sub
سعید قدیری مقدم
سه شنبه 19 اسفند 1382, 13:23 عصر
آقا خیلی ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.