我有以下代码:
using System.Drawing;
...
Graphics _graphics = Graphics.FromImage(...)
...
public void Draw(Stream stream, Rectangle rect, Color color) {
_graphics.FillRectangle(new SolidBrush(Color), 0, 0, Width, Height);
_graphics.DrawImage(new Bitmap(stream), rect);
}
我是否应该使用new Bitmap(...)
使用drawImage?
同问new SolidBrush(...)
答案 0 :(得分:4)
是的,您应该将它们包含在using语句中。此外,您应确保在此类中使用的_graphics
实例上调用Dispose方法。这可以通过使包含类实现IDisposable
来完成,以便此类的使用者可以将其包装在using
语句中。
答案 1 :(得分:2)
是的,处置这些资源非常重要。特别是位图很麻烦,它消耗大量的非托管内存来存储像素数据,但托管的Bitmap类包装器非常小。你可以在触发垃圾收集之前创建一个 lot 的Bitmap对象,给出Bitmap构造函数开始失败的高概率,因为没有剩余的非托管内存。
所以重写如下:
public void Draw(Stream stream, Rectangle rect, Color color) {
using (var bmp = new Bitmap(stream))
using (var brush = new SolidBrush(Color)) {
_graphics.FillRectangle(brush, 0, 0, Width, Height);
_graphics.DrawImage(bmp, rect);
}
}