PDA

View Full Version : سوال: آزاد کردن حافظه ی اشغال شده توسط UserControl



regbyte
سه شنبه 25 تیر 1387, 23:18 عصر
من چند تا UserControl دارم که در فرم اصلی برنامم بوسیله چند تا دکمه در یک Panel نمایششون می دم:




private void btn1_Click(object sender, EventArgs e)
{
UserControl1 c1 = new UserControl1();
PanelMain.Controls.Clear();
PanelMain.Controls.Add(c1);
}

private void btn2_Click(object sender, EventArgs e)
{
UserControl2 c2 = new UserControl2();
PanelMain.Controls.Clear();
PanelMain.Controls.Add(c2);
}


در این روش هر بار که یه نمونه از UserControl می سازم، حافظه می گیره، و همینطور فضای اشغال شده توسط برنامه زیادتر می شه، چطور می تونم بعد از نمایش UserControl مورد نظر حافظه اشغال شده توسط اون رو پاک کنم؟[هر بار باید UserControl رو از اول لود کنم]

لطفا راهنمایی کنید.

lomir
چهارشنبه 26 تیر 1387, 20:39 عصر
Az methode Dispose() estefade kon
c.dispose()

regbyte
پنج شنبه 27 تیر 1387, 00:18 صبح
بله؛ اما به چه صورت؟

DarkSoroush
پنج شنبه 27 تیر 1387, 01:18 صبح
تصور میکنم میخوای یک یوزر کنترل در حالی که داره نمایش داده میشه فضایی در حافظه رو اشغال نکنه!! درسته؟!
اگه اینطوریه که هیچ کاری نمیتونی بکنی.

ولی اگر منظورت اینه که یوزر کنترلی که نمایش داده نمیشه فضا اشغال نکنه باید بگم که این کار بعد از وجود 32 ابجکت در رم توسط CC خود فریم ورک انجام میشه. به همین دلیل لازم نیست کاری بکنید. البته راهی که دوستمون گفتند هم درسته ولی در اون حالت هم باید تعداد ابجکت ها به 32 تا برسه تا CC شروع به CLEAN کردن حافظه بکند.
میتونی قبل از دستور
PanelMain.Controls.Clear();
کنترل های موجود در پنل رو شناسایی و بعد از دستور هر کدوم رو dispose کنی!! البته این موضوع اصلا لازم نیست چون این عم به صورت خودکار انجام میشه. ولی خب من فقط سعی کردم کمک کنم.