GDI+最佳实践及改善性能说明(来自Graphics Programming with GDI+)

1. 使用“CreateGraphics”或“CreateFrom”等方法创建的Graphics对象用完之后必须Dispose掉

2. 从“Onpaint”或“PaintEventArgs.Graphics”获取的Graphics对象,一般不需要Dispose掉

3. 不要Dispose掉与Button、ListBox、DataGrid等控件关联的Graphics对象

4. 在“OnPaint”或“OnPaintBackground”等频繁调用的方法中使用到的Pens、brushes、Paths或者其他一些变量,一般定义为全局变量,以避免方法调用时创建变量对象造成的不必要时间和内存开销

5. 在绘制一些少量简单对象如Rectangle、Line等时就没必要使用双缓冲(这样反而会影响性能);在绘制、计算大量元素对象时,使用双缓冲可以很大程度上提升性能

6. 绘制性能与质量往往是个正反平衡的过程。SmoothingMode和TextRenderingHint属性可以用于设置图像及文本质量。如HighQuality及AntiAlias选项提供低速高质量的绘制效果;而HighSpeed及None选项提供高速低质量的绘制效果,使用时需要权衡一下速度与质量之间的平衡关系

7. 只重绘需要重绘的区域

8. 在绘制Line、Rectangle等许多图形对象时,根据需要可以将要绘制的对象放到GraphicsPath,然后一次性绘制GraphicsPath(使用此方法无法使用特定的Font或者Brush去绘制单个对象)

9. 绘制多个Line或Rectangle对象时,选用DrawLines或DrawRectangles方法

10.使用SystemBrushes和SystemPens(都不能调用Dispose方法,否则会引发异常)

11.避免自动缩放图片如:e.Graphics.DrawImage(image,10,10)没有指定Height和Width,会自动缩放图片,影响性能,绘图时应该指定Height和Width,如e.Graphics.DrawImage(image,10,10,image.Height,image.Width)

posted @ 2013-04-11 13:38  waterfrost  阅读(784)  评论(0编辑  收藏  举报