我有一个中等大小的应用程序,容纳两个表单。当我打开应用程序时,它会转到第一个表单,它消耗大约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());
}
答案 0 :(得分:1)
如果没有回收内存,可能是因为垃圾收集器还没有选择收集它。
GC在.NET中不具有确定性。
事实上,我已经编写了积极分配内存(处理非常大的数据结构)的应用程序,这些应用程序在该进程的可用虚拟地址空间几乎耗尽之前不会开始释放内存。)
GC运行时将取决于您使用的垃圾收集器(服务器与工作站),.NET实现以及应用程序的内存使用情况。
答案 1 :(得分:0)
您是否正在使用任何分析工具来检查内存使用情况或Windows任务管理器。任务管理器不是检查应用程序内存使用情况的好地方。使用perfmon
的处理指标来处理私有字节等内容。