問題
Form與Form之前的傳遞 造成記憶體無法回收
當有類似A Form呼叫B Form ,使用者須於B處理資料以後,更新回A的需求時,通常會在B的程式裡加上A的屬性,如下:
A Form 畫面
B Form 畫面
寫法如下:
B Form定義A Form的屬性,將A Form傳回
public GCTestMain MainForm
{
get;
set;
}
因此當B更新資料以後,要傳回給A時,直接呼叫A進行資料更新,並關閉如下:MainForm.dataGridView1.DataSource = null; MainForm.dataGridView1.Refresh(); MainForm.dataGridView1.DataSource = this.dataGridView1.DataSource; MainForm.dataGridView1.Refresh(); this.Close();但記憶體卻始終沒回收!!
解決方法
在B Form呼叫A Form 更新資料以後,強制GC回收,如下:
MainForm.dataGridView1.DataSource = null; MainForm.dataGridView1.Refresh(); GC.Collect(); GC.WaitForPendingFinalizers(); MainForm.dataGridView1.DataSource = this.dataGridView1.DataSource; MainForm.dataGridView1.Refresh(); this.Close();很快的就會看到效果(測試程式裡的GRID有66萬筆資料,所以記憶體佔3百多MB是正常的):
沒有留言:
張貼留言