PDA

View Full Version : سوال: آزادسازی حافظه



alibilgats
پنج شنبه 19 آذر 1388, 12:34 عصر
با سلام.
میرم سر اصل مطلب!
فرض کنید شما یه فرم دارید که یه دیتاگرید هم روی اون گذاشتید و از طریق DataSet,DataTableAdapter,DataBindingsource به یک جدول توی بانک اطلاعاتی SQL متصل شدید . توی Load فرم هم این کد رو نوشتید :



this.MyTableAdapter.Fill(this.MyDataset.MyTable);

وقتی ما این فرم رو باز میکنیم اطلاعات از داخل دیتابیس به حافظه کشیده میشه و به همین اندازه به میزان حافظه اشغال شده توسط برنامه ما اضافه میشه . اگه این فرم ما فرم اصلی برنامه باشه با بسته شدن این فرم اجرای برنامه ما هم تموم میشه و بطور اتوماتیک حافظه گرفته شده آزاد میشه .
اما اگه فرم ما فرم اصلی نباشه و ما بتونیم هر چند بار که بخواییم اونو باز و بسته کنیم در هر بار که این فرم باز میشه به حافظه اشغال شده اضافه میشه ولی با بسته شدن فرم حافظه آزاد نمیشه . یعنی هر بار که این فرم رو باز کنیم به حافظه اشغال شده توسط برنامه ما افزوده میشه . اگر فرض کنیم حجم اطلاعات استخراج شده از بانک اطلاعاتی بالا باشه معلوم نیست چه فاجعه ای رخ بده.
حالا من از شما اساتید خواهش میکنم تا اگه را حلی برای این موضوع دارید کمکم کنید.
یعنی بگید چطور میتونم حافظه رو بع از بسته شدن فرم آزاد کنم تا مشکلی پیش نیاد.
ممنون.

behroz1387
پنج شنبه 19 آذر 1388, 14:43 عصر
با سلام
بنظرم با this.close(); بعد از بستن فرم حافظه آزاد مي شه
موفق باشيد

shahab_ss
پنج شنبه 19 آذر 1388, 17:35 عصر
با استفاده از کلمه کلیدی Using این اتفاق بصورت خودکار رخ میده


using (SqlConnection _conn =
new
SqlConnection(ConfigurationManager.ConnectionStrin gs["constreng"].ToString()))
{
using (SqlCommand _comm = new SqlCommand("GetRevenueByOwner", _conn))
{

}

// Do something with _conn here
}

alibilgats
دوشنبه 23 آذر 1388, 12:56 عصر
دوباره سلام

من خودم برای بستن فرمم از

this.close

استفاده میکنم ولی جواب نمیده

در مورد روش دوست عزیزی که گفتن از Using استفاده کنم راستش من متوجه منظورتون نشدم
اگر میشه بیشتر توضیح بدین . با مثال که چه بهتر !

fjm11100
دوشنبه 23 آذر 1388, 13:32 عصر
ْتا جايي كه من ميدونم GC اين كارو ميكنه اما بهتره هميشه موقع كار با DB منابع را خودت آزاد كني و براي اين كار يك Destructor بساز حتما پيشبيني خطاها را هم بكن تا اگر طبق روال جلو نرفتش باز منابع در آخر كار آزاد شوند