GDI+对象如何释放

2013年8月28日 由 Creater 留言 »

像包装了文件句柄和数据库连接等非托管资源的类需要特殊处理以确保其资源被适当地释放一样,Pen、Brush和其他代表图形基元的GDI+类也在此范畴之内,因为他们包装了GDI+的句柄。如果关闭GDI+句柄失败,会导致削弱性的资源泄漏,特别是需要长时间运行的应用程序。为安全起见,对于Pen、Brush及其他基元类应该调用Dispose来确定性地释放他们所占用的资源。Graphics对象是以编程方式创建的(而不是由PaintEventArgs获得的),甚至要释放Graphics对象。
释放GDI+对象的方法之一是 —— 手动调用Dispose:

Pen pen = new Pen(Color.Black);
... ... ...
pen.Dispose();

C#程序员可能更喜欢一种特殊的using形式,这种形式会自动生成Dispose调用并在finally块中关闭对象。这种技术的优点之一就在于即使出现异常,也可以确保对Dispose的调用:

using (Pen pen = new Pen(Color.Black)){
... ... ...
}

另一种方法是在应用程序启动的时候创建钢笔(Pen)、画笔(Brush)及其他图形基元类,然后根据需要使用和重用它们。这样做会显著的减少应用程序所消耗的GDI+资源数量,并且几乎不需要调用Dispose来释放每个GDI+对象,这样同样改善了应用程序的性能。

广告位

发表评论

你必须 登陆 方可发表评论.