[英]Why doesn't my WPF application free up its memory?
我不明白為什么我的測試 WPF 應用程序在我關閉 MainWindow 並將其設置為 null 之后沒有釋放它使用的 memory,甚至運行垃圾收集器?
一開始,甚至在創建 MainWindow 之前,應用程序幾乎不需要 memory,大約 5 MB,但是當我創建第一個 window 時,它需要 43 MB,並且在應用程序的生命周期中保持不變。 難道不重新啟動應用程序就可以再次將其恢復到 5 MB 嗎?
public App()
{
ShutdownMode = ShutdownMode.OnExplicitShutdown;
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 2);
Thread.Sleep(2000);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (MainWindow == null)
{
MainWindow = new MainWindow();
MainWindow.Show();
}
else
{
MainWindow.Close();
MainWindow = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
您有 memory 泄漏,因此GC
將無法收集您的MainWindow
。 您必須取消訂閱您的事件處理程序。 因此,將計時器保留在支持字段中:
MainWindow = null;
// Add this:
this.dispatcherTimer.Tick -= new EventHandler(dispatcherTimer_Tick);
this.dispatcherTimer.Stop();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.