我有一个Windows窗体应用程序。当我动态地向表单添加一些按钮,然后删除这些按钮时,就会出现内存泄漏。
public partial class Form1 : Form
{
private Button[] buttons = new Button[1000];
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
var b = new Button();
Controls.Add(b);
buttons[i] = b;
}
for (int i = 0; i < 1000; i++)
{
Controls.Remove(buttons[i]);
buttons[i].Dispose();
buttons[i] = null;
}
}
}
内存使用情况:
(这些数字是在执行完全垃圾收集后记录的。程序在没有调试器的情况下运行,发布版本。)
更奇怪的是,无论button1_Click执行多少次,内存使用率都保持在5100 KB左右。我做错了什么?
答案 0 :(得分:0)
这不是内存泄漏。首先,如果你依赖Windows任务管理器,这是不对的。如果您真的想测量应用程序的实际内存,请尝试使用一些性能计数器。或者甚至可能是这样的,
private Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
其次,即使垃圾收集器收集堆中分配的对象,在它们被处理之后,这并不意味着应用程序将释放未分配的内存。只有在操作系统请求有线内存进行其他操作时才会发生这种情况。最重要的是,这不是内存泄漏。