PDA

View Full Version : سوال: آزاد كردن حافظه اشغال شده توسط يك فرم



m110_110
یک شنبه 26 آبان 1387, 08:16 صبح
با سلام خدمت دوستان عزيز

مي خواستم بدونم چرا بعد از بستن يك فرم در برنامه حتي با dispose كردنش هم، حافظه اشغال شده توسط اون فرم آزاد نمي گردد آيا راه ديگري دارد؟
ممنون مي شم كمكم كنيد چرا كه در برنامه وقتي كاربر از فرم اصلي تعدادي فرم باز و بسته مي كند همين طور حجم حافظه اشغال شده توسط برنامه بالا مي رود

m110_110
دوشنبه 27 آبان 1387, 07:56 صبح
کسی نیست جواب ما رو بده

مهدی کرامتی
دوشنبه 27 آبان 1387, 10:26 صبح
بخاطر اینه که سیستم Garbage Collector تا زمانی که مطمئن نشده هیچ ارجاعی به نمونه کلاس اون فرمها وجود نداره حافظه رو آزاد نمی کنه. متد Collect را از کلاس Garbage Collector فراخوانی کنید ببینید تاثیری داره یا نه.

m110_110
دوشنبه 27 آبان 1387, 12:38 عصر
سلام
ممنون از جوابتون
میشه بگید چگونه می تونم این متد رو فراخونی کنم
چون من هرچی گشتم چنین متدی ندیدم
اصلا کجا باید فراخونی کرد؟

Mehdi Asgari
دوشنبه 27 آبان 1387, 13:51 عصر
System.GC.Collect();
البته تو محیط های managed که حافظه مدیریت میشه، قاعدتا نباید تو کار GC دخالت کنیم (وگرنه اگه نیاز به مدیریت دستی حافظه داشتیم که خب مثلا از C++ استفاده می کردیم)
(یادتونم باشه که destructor ها در دات نت (بر خلاف C++) غیر قطعی (non-deterministic) هستن)
برای یادگیری GC در دات نت فصل 20 کتاب CLR Via C# رو بخونید

m110_110
دوشنبه 27 آبان 1387, 20:26 عصر
با سلام و تشکر از جوابتون
اما به یه مشکل دیگه خوردم برنامه ام با بانک sql به صورت فایلی در کنار فایل اجرایی کار می کند
یک فرم دارم برای پشتیبان گیری از بانک هام ولی وقتی می خواهم اون ها رو در آدرسی که کاربر وارد کرده کپی کنم از من error می گیره که از اون ها دارد استفاده می شود ولی در اون لحظه تمام کانکشن هام بسته اند و به بانک ها وصل نیستم وقتی برنامه ام در حال اجرا نیست می تونم کپی بگیرم ولی وقتی برنامه ام در حال اجراست نمی تونم نمی دانم چکار کنم