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;
等。我该如何解决这个问题?
感谢您的帮助,抱歉我的英语不好......
答案 0 :(得分:4)
您从未处置过Graphics
个对象。
使用using
,例如:
using (Graphics gr = Graphics.FromImage(image)) {
...
}
pcImageBox.Image = image;
另外,不要每帧都创建一个全新的Bitmap
。将旧的保存在成员变量中,并在下次调用时绘制它。如果屏幕尺寸发生变化(Screen.PrimaryScreen.Bounds != image.Size
),则只创建一个新的。
答案 1 :(得分:0)
您想要的更好的方法可能是: