2

我有一个包含两种形式的中型应用程序。当我打开应用程序时,它会转到第一个表单,它消耗大约 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());
 }
4

2 回答 2

1

如果内存没有被回收,可能是因为垃圾收集器还没有选择收集它。

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

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

GC 的运行时间取决于您使用的垃圾收集器(服务器还是工作站)、.NET 实现以及应用程序的内存使用情况。

于 2012-05-29T01:31:48.063 回答
0

您是否使用任何分析工具来检查内存使用情况或 Windows 任务管理器。任务管理器不是检查应用程序内存使用情况的好地方。将perfmon's Process 指标用于诸如 Private Bytes 之类的事情。

于 2012-05-29T07:50:19.650 回答