簡體   English   中英

為什么我的 WPF 應用程序沒有釋放其 memory?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM