GDI+最佳实践及改善性能说明(来自Graphics Programming with GDI+)
2013-04-11 13:38
337 查看
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)
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)
相关文章推荐
- 改善web性能最佳实践
- MySQL性能优化的21个最佳实践
- Android最佳性能实践(三)——高性能编码优化
- 可伸缩性最佳实践:来自eBay的经验
- mysql:21个性能优化最佳实践之5[在Join表的时候使用相当类型的列,并将其索引]
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- android最佳性能实践
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- Android最佳性能实践(四)——布局优化技巧
- TOP100summit:【分享实录-华为】微服务场景下的性能提升最佳实践
- 前端性能优化最佳实践
- "性能测试最佳实践" PPT 下载
- Android最佳性能实践(一)——合理管理内存
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- MySQL性能优化的21个最佳实践
- WWDC 2016 Session笔记 - Session 213 使用最佳实践改进App(Improving Existing Apps with Modern Best Practices)
- 网页游戏性能优化最佳实践:延迟策略
- Android最佳性能实践(一)——合理管理内存
- Android最佳性能实践(二)——分析内存的使用情况
- 可伸缩性最佳实践:来自eBay的经验