为什么使用的内存量会增加?

时间:2012-05-31 22:58:11

标签: c# memory

private void Draw(){
     int width  = Screen.PrimaryScreen.Bounds.Width;
     int height = Screen.PrimaryScreen.Bounds.Height;
     Bitmap image= new Bitmap(width, height);
     Graphics gr =  Graphics.FromImage(image);
     gr.CopyFromScreen(0, 0, 0, 0, new Size(width, height));
     Random rnd = new Random();

     gr.DrawEllipse(new Pen(Color.Red, rnd.Next(100)), rnd.Next(300), rnd.Next(100), rnd.Next(600), rnd.Next(1000));
     Point[] p = new Point[3];
     p[0] = new Point(rnd.Next(30),  rnd.Next(60));
     p[1] = new Point(rnd.Next(100), rnd.Next(260));
     p[2] = new Point(rnd.Next(30),  rnd.Next(10));
     gr.DrawPolygon(Pens.AliceBlue, p);
     gr.DrawBeziers(Pens.Yellow, p);
     pcImageBox.Image = image;
}

当我使用Timer并且每300毫秒调用Draw()方法时,一切正常,但是当我查看进程管理器时,我的项目使用更多内存(内存每300毫秒增加一次)

也许我应该使用垃圾收集器或使用p = null;等。我该如何解决这个问题?

感谢您的帮助,抱歉我的英语不好......

2 个答案:

答案 0 :(得分:4)

您从未处置过Graphics个对象。

使用using,例如:

using (Graphics gr =  Graphics.FromImage(image)) {
     ...
}
pcImageBox.Image = image;

另外,不要每帧都创建一个全新的Bitmap。将旧的保存在成员变量中,并在下次调用时绘制它。如果屏幕尺寸发生变化(Screen.PrimaryScreen.Bounds != image.Size),则只创建一个新的。

答案 1 :(得分:0)

您想要的更好的方法可能是:

BufferedGraphics