【请教】GDI+绘图占用CPU资源较高,如何解决?

wsptr 2012-05-12 12:23:28
自己用C#写的控件,主要是用GDI+绘图,感觉效率极差,CPU占用特别高,按照10ms的数据更新速率CPU能占到30%左右了。请高手帮忙看看,该如何优化。
谢谢!!!
代码在
http://download.csdn.net/detail/wsptr/4287188
...全文
729 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conmajia 2012-05-27
  • 打赏
  • 举报
回复
用多线程在重叠的透明图上画会如何?我没有试过。
wsptr 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

绘制图形后变成图片,不要一直重绘。这样可以减少很大的功耗,以前写过重绘的代码,记得是这么处理的
[/Quote]

但是数据一变就得要重绘啊……
wsptr 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用 11 楼 的回复:

这几天一直在看,还是木有解决啊……


改用dx会如何?
[/Quote]

用DX未免也太大材小用了吧……
Conmajia 2012-05-22
  • 打赏
  • 举报
回复
今天尝试了下旋转图片,150x150的图片,500fps旋转,cpu消耗可以忽略 0~2% 还是老机器,i3核


很神奇

startstartsvip 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:

引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


野比 三楼 怎么搞出来的 什么软件,开新贴,科普一下吧

那个大概是Visual Studio旗舰版带的性能分析组件吧
[/Quote]

多谢15楼
zcw840421 2012-05-21
  • 打赏
  • 举报
回复
绘制图形后变成图片,不要一直重绘。这样可以减少很大的功耗,以前写过重绘的代码,记得是这么处理的
Conmajia 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:

引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


野比 三楼 怎么搞出来的 什么软件,开新贴,科普一下吧

那个大概是Visual Studio旗舰版带的性能分析组件吧
[/Quote]

嗯,识货
startstartsvip 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:

引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


野比 三楼 怎么搞出来的 什么软件,开新贴,科普一下吧

那个大概是Visual Studio旗舰版带的性能分析组件吧
[/Quote]

哦 看了一下 差不多
iyomumx 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


野比 三楼 怎么搞出来的 什么软件,开新贴,科普一下吧
[/Quote]
那个大概是Visual Studio旗舰版带的性能分析组件吧
startstartsvip 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。
[/Quote]

野比 三楼 怎么搞出来的 什么软件,开新贴,科普一下吧
xiaoid 2012-05-20
  • 打赏
  • 举报
回复
要求图形性能,用DirectX.
Conmajia 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

这几天一直在看,还是木有解决啊……
[/Quote]

改用dx会如何?
wsptr 2012-05-20
  • 打赏
  • 举报
回复
这几天一直在看,还是木有解决啊……
wsptr 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


我开始以为是绘图、计算占用的资源比较多,最后发现貌似是那个旋转图像的地方占用资源最多……瞬间凌乱了,茫然不知所措。


是啊。。所以我在想,换种方法,旋转的那张俯仰角图片用DrawLine之类纯画出来。。性能……
[/Quote]

那就会涉及到大量的数学运算了,一堆的Sin和Cos,不知道会怎样……
Conmajia 2012-05-13
  • 打赏
  • 举报
回复
有计算。。但对比image来说,计算量基本可以忽略了。。最多3、4%
wsptr 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

今天试了试全屏画网格,1280x998@100fps,i3负载25%左右
[/Quote]

不进行计算的么?看来绘图效率真的很成问题啊……
Conmajia 2012-05-13
  • 打赏
  • 举报
回复
今天试了试全屏画网格,1280x998@100fps,i3负载25%左右
Conmajia 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。


我开始以为是绘图、计算占用的资源比较多,最后发现貌似是那个旋转图像的地方占用资源最多……瞬间凌乱了,茫然不知所措。
[/Quote]

是啊。。所以我在想,换种方法,旋转的那张俯仰角图片用DrawLine之类纯画出来。。性能应该能提高的。。

哈哈,你凌乱的试试吧。。
wsptr 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
我在想如果用基本图形代替image又会如何呢。。

哈哈,以前我做频谱仪的时候就没搞好性能问题,现在还是半吊子。。
[/Quote]

我开始以为是绘图、计算占用的资源比较多,最后发现貌似是那个旋转图像的地方占用资源最多……瞬间凌乱了,茫然不知所措。
Conmajia 2012-05-12
  • 打赏
  • 举报
回复
参考这篇文章
http://www.codeproject.com/Articles/16406/Fast-Drawing-of-Non-32bpp-Images-with-System-Drawi

by J. Dunlap

Fast Drawing of Non-32bpp Images with System.Drawing

It is a well-known fact that when drawing images to the screen that are a different pixel format than the screen's pixel format, format conversion must be performed. GDI+ provides the CachedBitmap class to facilitate easy caching of a converted version of a bitmap. However, this functionality is not exposed in .NET, so normally bitmaps that do not match the screen format are converted on each drawing call.

...
加载更多回复(3)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧