项目是做一个画图程序,最近加入了一个图片闪烁的效果,用timer定时每100ms画一遍,每遍通过colormatrix设置不同的alpha值实现(colormatrix几乎不会增加负荷,渲染速度仅增加1ms消耗)。效果是没问题,但是效率有问题了。当画一个3000*3000的jpeg图片的时候,debug模式下测试平均需要8ms(graphics的所有参数都设置为速度优先),此时还比较流畅。但是当图片缩小后再画出来就达到35ms左右(通过Gdi.ScaleTransform()进行缩放的),效率明显下降,卡顿严重,鼠标move、click事件都不响应了,伤脑筋了,没有想到好的解决办法,放大没事,就缩小会卡。总结一下,问题的原因就是大幅图片缩小画出来效率低。
多线程能解决吗?想用主线程的timer发重画请求道queue里面,多个线程从queue中取出请求在后台线程渲染整幅图片然后发到另一个queue中,主线程从这个queue中取按请求顺序取图片画到form上。同时主线程响应用户鼠标move、click等操作改变图形的坐标等状态。但是对c#多线程不熟,怎么同步呢?能提高效率吗?
TO BE CONTINUED...
时间: 2024-11-10 08:04:47