封闭形式不会释放内存

本文关键字:释放 内存 | 更新日期: 2023-09-27 18:35:31

我有一个中型应用程序,它容器了两个表单。当我打开应用程序时,它会转到第一个表单,消耗大约 17mb。然后我打开第二个表单并关闭第一个表单,大约消耗了 57mb。我关闭了第二个并重新打开第一个,33mb。关闭第一个并重新打开第二个,66mb。为什么没有回收此内存?这是我用来关闭当前窗体并打开新窗体的代码。

private void honButton_Click(object sender, EventArgs e)
{
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
    this.Close();
    this.Dispose();
    t.Start();
}

 public static void ThreadProc()
 {
    Application.Run(new Form1());
 }

封闭形式不会释放内存

如果未回收内存,可能是因为垃圾回收器尚未选择收集内存。

GC 在 .NET 中不是确定性的。

事实上,我编写的应用程序积极分配内存(处理非常大的数据结构),直到进程的可用虚拟地址空间几乎耗尽时才开始释放内存)。

GC 何时运行将取决于您使用的垃圾回收器(服务器与工作站)、哪个 .NET 实现以及应用程序的内存使用情况配置文件。

您是否使用任何分析工具来检查内存使用情况或 Windows 任务管理器。任务管理器不是检查应用程序内存使用情况的好地方。将perfmon的进程指标用于私有字节等内容。